即使您选择任何TimeZone,以秒为单位的时间也相同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使您选择任何TimeZone,以秒为单位的时间也相同?相关的知识,希望对你有一定的参考价值。

在使用TimeZone“Europe / Warsaw”后,我使用以下功能在几秒钟内获得时间。

我正确地获得了日期,但是只要我在几秒钟内转换日期,我的输出就会出错。服务器在TimeZone“Europe / Warsaw”中预计秒数。什么是最好的方法摆脱这个?

public static long getTimeInSeconds() {
    try {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //Here you say to java the initial timezone. This is the secret
        sdf.setTimeZone(TimeZone.getTimeZone("Europe/Warsaw"));

        //Will get in Warsaw time zone
        String date = sdf.format(calendar.getTime());

        Date date1 = sdf.parse(date);

        //Convert time in seconds as required by server.
        return (date1.getTime() / 1000);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    return 0;
}
答案

“TimeZone中的秒”没有意义,因为纪元秒意味着“自纪元以来的秒数”(其中纪元是1970年1月1日在UTC的午夜),无论时区如何。

这个价值在世界各地都是一样的。但是,相同的纪元秒值可以转换为本地日期和时间,具体取决于时区。

示例:现在,epoch第二个值是1520352472.这个相同的值(自纪元以来的1520352472秒),在世界各地都是一样的。但是,此值可以表示每个时区中的不同日期和时间:

  • 2018年3月6日,UTC时间16:07:52
  • 2018年3月6日,13:07:52在圣保罗(巴西)
  • 2018年3月7日,01:07:52在东京

问题是:无论我在哪个时区,epoch秒值都是相同的,所以你根本不需要考虑任何时区。

java.util.Datedoesn't have any notion of timezone也是,它只包含一个long值,表示自纪元以来的毫秒数。所以,如果你有一个Date对象,只需使用这个值并除以1000:

long epochSeconds = new Date().getTime() / 1000;

实际上,如果你只想要当前日期/时间的数值,你甚至不需要创建一个Date来获取它:

long epochSeconds = System.currentTimeMillis() / 1000;
另一答案

您需要在从日历中获取时间后设置时区

public static long getTimeInSeconds() {

    try {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //Will get in Warsaw time zone
        String date = sdf.format(calendar.getTime());

        //Here you say to java the initial timezone. This is the secret
        sdf.setTimeZone(TimeZone.getTimeZone("Europe/Warsaw"));

        Date date1 = sdf.parse(date);

        //Convert time in seconds as required by server.
        return (date1.getTime() / 1000);

    } catch (ParseException e) {
        e.printStackTrace();
    }
    return 0;
}

以上是关于即使您选择任何TimeZone,以秒为单位的时间也相同?的主要内容,如果未能解决你的问题,请参考以下文章

如何测量 powershell 脚本中不同功能的持续时间(以秒为单位)?

如何检查两个日期之间的差异(以秒为单位)?

每个周期索引一个数组(以秒为单位)

如何在 Swift3 中以秒为单位将字符串更改为分钟?

使用linux命令以秒为单位获取墙上时间?

从键盘输入一个以秒为单位的时间值(如10000秒),将其转化为以时、分、秒表示的时间