如何用Java将公历转换为Unix时间?
我需要一种方法将GregorianCalendar对象转换为Unix时间(即长时间)。还需要一种方法将Unix时间(long)转换回GregoriaCalendar对象。有什么方法可以做到这一点吗?如果没有,我怎么做?任何帮助都将不胜感激 链接到GregorianCalendar类-->如何用Java将公历转换为Unix时间?,java,methods,gregorian-calendar,unix-timestamp,Java,Methods,Gregorian Calendar,Unix Timestamp,我需要一种方法将GregorianCalendar对象转换为Unix时间(即长时间)。还需要一种方法将Unix时间(long)转换回GregoriaCalendar对象。有什么方法可以做到这一点吗?如果没有,我怎么做?任何帮助都将不胜感激 链接到GregorianCalendar类--> 谢谢。我相信这一点,并且可以让您以您想要的方式获取和设置长值。查看setTimeInMillis和getTimeInMillis函数:()
谢谢。我相信这一点,并且可以让您以您想要的方式获取和设置长值。查看setTimeInMillis和getTimeInMillis函数:()
getTimeInMillis()
和setTimeInMillis(long)
将让您以毫秒为单位获取和设置时间,即unix时间乘以1000。您必须手动调整,因为unix时间不包括毫秒,只包括秒
long unixTime = gregCal.getTimeInMillis() / 1000;
gregCal.setTimeInMillis(unixTime * 1000);
long unixTime=gregCal.getTimeInMillis()/1000;
gregCal.setTimeInMillis(unixTime*1000);
旁白:如果您在应用程序中经常使用日期,尤其是在转换日期或使用多个时区时,我强烈建议您使用该库。它非常完整,比Java附带的日历系统更容易理解。tl;博士
然后往另一个方向走
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" )
)
)
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
避免遗留日期时间类
其他答案正确且简短。但是,仅供参考,诸如和java.text.simpleDataFormat
之类的麻烦的旧日期时间类现在被内置在Java8和Java9中的类所取代
下面是如何转换和使用现代类来解决您的问题
java.time
从旧类GregorianCalendar
转换为现代类ZoneDateTime
。调用添加到旧类中的新方法
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
然后往另一个方向走
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" )
)
)
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
如果您指的是自1970年第一个时刻(UTC,1970-01-01T00:00:00Z)起的整秒计数,请调用toEpochSecond
long secondsSinceEpoch = zdt.toEpochSecond() ;
如果您指的是自1970年开始以UTC为单位的毫秒计数,那么请提取一个瞬间
。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
现在
请记住,索取整秒钟或更长时间可能会导致数据丢失。zoneDateTime
和Instant
都解析为纳秒。因此,在计算整个秒数或毫秒数时,可能出现的任何秒数或纳秒数都将被忽略
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 使用兼容的或更高版本,您可以直接与数据库交换java.time对象。不需要字符串,也不需要java.sql.*类 从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。Unix C编程中的
time
方法返回整数秒。总是这样。还有另一种方法utime
,它使用一个具有两个long的结构:一个用于秒,另一个用于微秒。谢谢。一个setTimeInMillis
大概是我最后一次找它了。因为在Java1.0中,他们对不可变的实例(String、Date、Integer、Long等.pp)有着很好的想法,并且没有想到在1.1中,他们放弃了Java设计人员有过的最好的想法。
long millisecondsSinceEpoch = instant.toEpochMill() ;