我需要一种方法将GregorianCalendar对象转换为Unix时间(即很长)。还需要一种方法将Unix Time(long)转换回GregorianCalendar对象。有什么方法可以做到这一点吗?如果没有,那我该怎么办呢?任何帮助都将受到高度赞赏。
指向GregorianCalendar类的链接 - > http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html
感谢。
答案 0 :(得分:29)
方法getTimeInMillis()
和setTimeInMillis(long)
将让您获得并设置以毫秒为单位的时间,即unix时间乘以1000.您必须手动调整,因为unix时间不包括毫秒 - 只有几秒钟。
long unixTime = gregCal.getTimeInMillis() / 1000; gregCal.setTimeInMillis(unixTime * 1000);
除了:如果您在应用程序中使用了很多日期,特别是如果您要转换日期或使用多个时区,我强烈建议您使用JodaTime库。与Java附带的Calendar系统相比,它非常完整且理解起来更自然。
答案 1 :(得分:1)
我相信GregorianCalendar.getTimeInMillis()和GregorianCalendar.SetTimeInMillis()会让您按照自己的方式设置长值。
答案 2 :(得分:1)
查看setTimeInMillis和getTimeInMillis函数:http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis()
答案 3 :(得分:0)
Calendar.getTimeInMillis()应该是你要找的东西。
答案 4 :(得分:0)
myGregCal.toZonedDateTime().toEpochSecond() // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.
走向另一个方向......
GregorianCalendar.from( // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
Instant.ofEpochSecond( yourCountOfWholeSecondsSinceEpoch ) // Moment in UTC.
.atZone( // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
ZoneId.of( "Africa/Tunis" )
)
)
其他答案是正确而简短的。但是,仅供参考,麻烦的旧日期时间类如java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在是legacy,取而代之的是内置的java.time类Java 8& Java 9.
所以这里是如何转换和使用现代类代替你的问题。
从旧版GregorianCalendar
转换为现代班级ZonedDateTime
。调用添加到旧类的新方法。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
走向另一个方向......
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
如果按“Unix time”表示自UTC 1970,101-01-01T00:00:00Z 1970年第一时刻epoch reference以来的整秒数,则调用toEpochSecond
。
long secondsSinceEpoch = zdt.toEpochSecond() ;
如果您的意思是自1970年以UTC开始的毫秒数,则提取Instant
。 Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
Instant instant = zdt.toInstant() ;
现在ask for the count of milliseconds。
long millisecondsSinceEpoch = instant.toEpochMill() ;
请记住,要求整秒或milliseconds可能会导致数据丢失。 ZonedDateTime
和Instant
都解析为纳秒。因此,当您计算整秒或毫秒时,可能存在的任何microseconds或纳秒都将被忽略。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。