【问题标题】:How to get the current UTC time in seconds如何以秒为单位获取当前的 UTC 时间
【发布时间】:2011-11-26 11:38:56
【问题描述】:

我有一个应用程序,它需要以秒为单位比较时间。

我想知道如何以秒为单位获取当前的 UTC 时间。

有人可以发布一个示例,我们如何在 Java 中做到这一点?

【问题讨论】:

    标签: java time seconds


    【解决方案1】:

    要将日期存储为整数而不是长整数,您可以除以 1000 并选择减去另一个日期,例如 2019 年 1 月 1 日:

    private int getUTC()
    {
        Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        cal1.set(2019, 1, 1);
        long millis1 = cal1.getTimeInMillis();
    
        //Current date in milliseconds
        long millis2 = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
    
        // Calculate difference in seconds
        long diff = millis2 - millis1;
        return (int)(diff / 1000);
    }
    

    【讨论】:

      【解决方案2】:

      以秒为单位获取当前 UTC 时间(自 1.5 起):

      TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
      

      根据 Javadoc:

      http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#currentTimeMillis

      返回:

      当前时间和当前时间之间的差异,以毫秒为单位 UTC 时间 1970 年 1 月 1 日午夜。

      【讨论】:

        【解决方案3】:

        Joda 让一切变得简单

        import org.joda.time.ReadableInstant;
        import org.joda.time.DateTime;
        
        import static org.joda.time.DateTimeZone.UTC;
        import static org.joda.time.Seconds.secondsBetween;
        
        ...
        
        ReadableInstant start = new DateTime("2011-01-01", UTC);
        ReadableInstant end = new DateTime("2011-02-02", UTC);
        
        int secondsDifference = secondsBetween(start, end).getSeconds();
        

        【讨论】:

          【解决方案4】:

          这行得通:

              Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
              GregorianCalendar gregorianCalendar = new GregorianCalendar
              (
                  calendar.get(Calendar.YEAR),
                  calendar.get(Calendar.MONTH),
                  calendar.get(Calendar.DAY_OF_MONTH),
                  calendar.get(Calendar.HOUR_OF_DAY),
                  calendar.get(Calendar.MINUTE),
                  calendar.get(Calendar.SECOND)
              );
              return gregorianCalendar.getTime();
          

          【讨论】:

          • 这太复杂了。为什么要将值复制到新的 GregorianCalendar 中?此外,这将丢失毫秒。
          【解决方案5】:
           public static  long getUtcTime(long time) {
              System.out.println("Time="+time);
               SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
                 Date dbefore=new Date(time);
                 System.out.println("Date before conversion="+format.format(dbefore));
                Calendar c = Calendar.getInstance();
                 c.setTimeInMillis(time);
                    TimeZone timezone = c.getTimeZone();
                  int offset = timezone.getRawOffset();
                  if(timezone.inDaylightTime(new Date())){
                      offset = offset + timezone.getDSTSavings();
                  }
                  int offsetHrs = offset / 1000 / 60 / 60;
                  int offsetMins = offset / 1000 / 60 % 60;
          
                  System.out.println("offset: " + offsetHrs);
                  System.out.println("offset: " + offsetMins);
          
                  c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
                  c.add(Calendar.MINUTE, (-offsetMins));
          
                  System.out.println("Date after conversion: "+format.format(c.getTime()));
                System.out.println("Time converted="+c.getTime().getTime());
                   return c.getTime().getTime();
          
          
              }
          

          【讨论】:

            【解决方案6】:

            您可以使用它来获取时区在您想要返回的时区中传递

            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
            

            然后你可以在日历对象上调用任何你想要的东西

            System.out.println(cal.get(Calendar.YEAR));
            System.out.println(cal.get(Calendar.HOUR));
            System.out.println(cal.get(Calendar.HOUR_OF_DAY));
            System.out.println(cal.get(Calendar.MINUTE));
            

            以下示例以秒为单位比较两个日历

            Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
            Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
            
            // Set the dates for calendars
            cal1.set(2011, 1, 1);
            cal2.set(2011, 2, 2);
            
            // Get the represented date in milliseconds as a long
            long milis1 = cal1.getTimeInMillis();
            long milis2 = cal2.getTimeInMillis();
            
            // Calculate difference in milliseconds
            long diff = milis2 - milis1;
            
            // Calculate difference in seconds
            long diffSecs = diff / 1000;
            
            System.out.println("In seconds: " + diffSecs + " seconds");
            

            【讨论】:

            • 感谢贾斯汀的回答,但我想要以秒为单位的时间..我没有看到我想要的秒数..谢谢...
            • 澄清如果我得到日历 1 of 01/01/2011 12:31:21 和日历 2 of 02/02/2011 07:21:01 你想要 20 秒的差异或 3503006104.69374 秒
            • 秒:System.out.println(cal.get(Calendar.SECOND)); 只要知道这是一个从0到59的数字;您将不得不使用整个 Calendar 对象进行比较。
            • 非常感谢所有回答我问题的人,非常感谢您抽出宝贵的时间来回答这些问题......
            【解决方案7】:

            【讨论】:

            • 这是以毫秒为单位获取 UTC 时间的最简单方法(可轻松转换为秒)。不幸的是,Java 的开发人员认识到这对于进行重要的计算来说不够精确,因此他们建议使用 Calendar 对象进行任何日期/时间计算或比较。查看download.oracle.com/javase/6/docs/api/java/util/Calendar.html
            • currentTimeMillis 不是 UTC,它是系统本地时间(可能是也可能不是 UTC)。
            • @Dunes:不,currentTimeMillis 是 UTC。请参阅 Javadocs:返回:当前时间与 UTC 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。 docs.oracle.com/javase/6/docs/api/java/lang/…
            • @sleske 你不正确。 “开始时间”是 UTC,但日期将是语言环境时间。您可以通过以下方式轻松查看:System.out.println(new Date());
            • @Randgalt:那是因为Date.toString()(你隐式调用)是作弊 - 它会在你当地的时区打印日期(我也被这个绊倒了)。存储在 Date 实例中的时间戳采用 UTC。如果您还有其他问题,请随时提出单独的问题 :-)。
            猜你喜欢
            • 1970-01-01
            • 2014-08-24
            • 2021-05-28
            • 2017-11-29
            • 2016-07-04
            • 2017-04-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多