如何将时间设置为纪元时间java?
Posted
技术标签:
【中文标题】如何将时间设置为纪元时间java?【英文标题】:How to set time to epoch time java? 【发布时间】:2013-07-02 11:20:55 【问题描述】:我正在尝试在 java 中将时间设置为纪元日期时间。我怎样才能做到这一点?这样我就可以在纪元日期时间之外获得年月日等。
【问题讨论】:
新日期(0L);试试这个 【参考方案1】:使用新日期(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
【讨论】:
【参考方案2】:据我了解,您只想将其存储在某个变量中吗?所以使用
Date epoch = new Date(0);
【讨论】:
【参考方案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);
【讨论】:
【参考方案4】:tl;博士
Instant.EPOCH
使用 java.time
麻烦的旧日期时间类包括 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.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
Java SE 8 和 SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6 和 SE 7 ThreeTen-Backport 中的大部分 java.time 功能都向后移植到 Java 6 和 7。 Android ThreeTenABP 项目专门针对 Android 改编了 ThreeTen-Backport(如上所述)。 见How to use ThreeTenABP…。【讨论】:
以上是关于如何将时间设置为纪元时间java?的主要内容,如果未能解决你的问题,请参考以下文章
std::chrono:将时钟的纪元设置为 1/1/0000
如何将(round)纪元时间转换为最接近的小时和日期wrt IST(在Java中)