我正在尝试将时间设置为java中的纪元日期时间。我怎样才能做到这一点?所以我可以在纪元日期之前获得一些月的日子等。
答案 0 :(得分:7)
使用新日期(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
答案 1 :(得分:4)
据我了解,您只想将其存储在某个变量中?所以请使用
Date epoch = new Date(0);
答案 2 :(得分:3)
试试这个
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);
答案 3 :(得分:1)
Instant.EPOCH
包括Date
和Calendar
在内的麻烦的旧日期时间类现在已经遗留下来,取而代之的是java.time类。大部分java.time功能都被反向移植到Android(见下文)。
要获取1970-01-01
的{{3}}日期的仅限日期值,请使用LocalDate
。 Java & Unix epoch reference类表示没有时间且没有时区的仅限日期的值。
LocalDate epoch = LocalDate.ofEpochDay( 0L ) ;
epoch.toString:1970-01-01
要获取同一纪元的日期时间值,请使用常量LocalDate
。 Instant.EPOCH
类代表Instant
中时间轴上的一个时刻,分辨率为UTC(小数部分最多九(9)位)。
Instant epoch = Instant.EPOCH ;
epoch.toString():1970-01-01T00:00:00Z
标准nanoseconds输出中的Z
是Zulu
的缩写,表示ISO 8601。
要获得此后的若干年,月,日,请使用UTC课程。
Period period = Period.between(
LocalDate.ofEpochDay( 0 ) ,
LocalDate.now( ZoneId.of( "America/Montreal" ) )
) ;
搜索Stack Overflow以获取Period
。
Period
框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和&amp; Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
从哪里获取java.time类?