【问题标题】:How do you create a proper Epoch calendar object in Java?如何在 Java 中创建合适的 Epoch 日历对象?
【发布时间】:2011-04-30 12:28:15
【问题描述】:

我想创建一个日历对象,它是纪元日期。什么是“正确”(如果有的话)方法?

Date epochDate = new java.text.SimpleDateFormat ("dd/MM/yyyy HH:mm:ss z").parse("01/01/1970 01:00:00 GMT");
Calendar epochCal;
epochCal.setTime(epochDate);

// or maybe

Calendar epochCal;
epochCal.setTimeInMillis(1);

【问题讨论】:

    标签: java epoch


    【解决方案1】:

    'setTimeInMillis()' 方法可以正常工作并且易于被其他人理解。如果您将其传递为 0 而不是 1,则可能会更清楚。第一种方法有更多的线路噪音,只会增加更多可能在维护中搞砸的事情。

    【讨论】:

      【解决方案2】:

      java.time

      旧的日期时间 API(java.util 日期时间类型及其格式类型,SimpleDateFormat)已过时且容易出错。建议完全停止使用,改用java.time,modern date-time API*。

      使用现代 API 的解决方案:

      import java.time.Instant;
      
      public class Main {
          public static void main(String[] args) {
              Instant instant = Instant.EPOCH;
              System.out.println(instant);
          }
      }
      

      输出:

      1970-01-01T00:00:00Z
      

      如果您需要java.util.Calendar 引用的对象,您可以使用Instant 的这个对象获得相同的结果:

      // If at all you need a Calendar object, derive it from instant
      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(instant.toEpochMilli());
      // Verification
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
      sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
      System.out.println(sdf.format(calendar.getTime()));
      

      通过 Trail: Date Time 了解有关 modern date-time API* 的更多信息。


      * 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        • 2014-04-15
        • 2023-03-31
        • 2015-05-02
        • 1970-01-01
        相关资源
        最近更新 更多