【发布时间】:2013-07-02 11:20:55
【问题描述】:
我正在尝试在 java 中将时间设置为纪元日期时间。我怎样才能做到这一点?这样我就可以在纪元日期时间之外获得年月日等。
【问题讨论】:
-
新日期(0L);试试这个
标签: java android date time epoch
我正在尝试在 java 中将时间设置为纪元日期时间。我怎样才能做到这一点?这样我就可以在纪元日期时间之外获得年月日等。
【问题讨论】:
标签: java android date time epoch
使用新日期(0L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(new Date(0L)));
注意您的时区,因为它会根据您的默认设置而改变。
更新
在 java 8 中,您可以使用新的 java.time 库
你有这个常量Instant.EPOCH
【讨论】:
据我了解,您只想将其存储在某个变量中吗?所以使用
Date epoch = new Date(0);
【讨论】:
试试这个
Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
c.setTimeInMillis(0);
int day = c.get(Calendar.DATE);
int month = c.get(Calendar.MONTH) + 1;
int year = c.get(Calendar.YEAR);
【讨论】:
Instant.EPOCH
麻烦的旧日期时间类包括 Date 和 Calendar 现在是遗留的,被 java.time 类所取代。大部分 java.time 功能都向后移植到 Android(见下文)。
要获取 1970-01-01 的 Java & Unix epoch reference 日期的仅日期值,请使用 LocalDate。 LocalDate 类表示没有时间和时区的仅日期值。
LocalDate epoch = LocalDate.ofEpochDay( 0L ) ;
epoch.toString: 1970-01-01
要获取同一时期的日期时间值,请使用常量Instant.EPOCH。 Instant 类代表UTC 时间线上的时刻,分辨率为nanoseconds(最多九 (9) 位小数)。
Instant epoch = Instant.EPOCH ;
epoch.toString(): 1970-01-01T00:00:00Z
标准ISO 8601 输出中的Z 是Zulu 的缩写,表示UTC。
要获取从那时起的年数、月数、天数,请使用 Period 类。
Period period = Period.between(
LocalDate.ofEpochDay( 0 ) ,
LocalDate.now( ZoneId.of( "America/Montreal" ) )
) ;
搜索 Stack Overflow 以获取更多关于 Period 的讨论和示例。
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
【讨论】: