[英]How can I convert from Gregorian Calendar to Unix Time, in Java?
我需要一个方法将GregorianCalendar对象转换为Unix时间(即很长)。 还需要一种方法将Unix Time(long)转换回GregorianCalendar对象。 有什么方法可以做到这一点吗? 如果没有,那我该怎么办呢? 任何帮助将受到高度赞赏。
链接到GregorianCalendar类 - > http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html
谢谢。
方法getTimeInMillis()
和setTimeInMillis(long)
将允许您以毫秒为单位获取和设置时间,即unix时间乘以1000.您必须手动调整,因为unix时间不包括毫秒 - 仅秒。
long unixTime = gregCal.getTimeInMillis() / 1000; gregCal.setTimeInMillis(unixTime * 1000);
另外 :如果您在应用程序中使用了很多日期,特别是如果您要转换日期或使用多个时区,我强烈建议您使用JodaTime库。 它比Java附带的Calendar系统更完整,更自然。
我相信GregorianCalendar.getTimeInMillis()和GregorianCalendar.SetTimeInMillis()可以让你以你想要的方式获取和设置长值。
查看setTimeInMillis和getTimeInMillis函数: http : //download.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis ()
Calendar.getTimeInMillis()应该是您正在寻找的。
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
现在是遗留的 ,取而代之的是Java 8和Java 9中内置的java.time类。
所以这里是如何转换和使用现代类代替您的问题。
从遗留类GregorianCalendar
转换为现代类ZonedDateTime
。 调用添加到旧类的新方法。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
走向另一个方向......
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
如果通过“Unix时间”你的意思是自1970年第一时刻的纪元参考以来在UTC,1970-01-01T00:00:00Z中的整秒数,则调用toEpochSecond
。
long secondsSinceEpoch = zdt.toEpochSecond() ;
如果你的意思是自1970年以UTC开始的毫秒数,那么提取一个Instant
。 Instant
类表示UTC时间轴上的一个时刻,分辨率为纳秒 (最多九(9)位小数)。
Instant instant = zdt.toInstant() ;
现在要求计算毫秒数 。
long millisecondsSinceEpoch = instant.toEpochMill() ;
请记住,要求整秒或毫秒可能会导致数据丢失。 ZonedDateTime
和Instant
都解析为纳秒。 因此,当您计算整秒或毫秒时,将忽略可能存在的任何微秒或纳秒。
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
使用符合JDBC 4.2或更高版本的JDBC驱动程序 ,您可以直接与数据库交换java.time对象。 不需要字符串也不需要java.sql。*类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的类,比如Interval
, YearWeek
, YearQuarter
,和更多 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.