我怎么可以转换为从历来Unix时间,在Java?
-
26-09-2019 - |
题
我需要的一种转换GregorianCalendar对象Unix时间(即一个长)。还需要一种方法来转换Unix时间(长)回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的日历系统了解。
其他提示
我相信, 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.time Java 8 和 Java 9 中内置的类。
因此,这里是如何转换和使用现代类来解决您的问题。
java.time
从遗留类转换 GregorianCalendar
到现代阶级 ZonedDateTime
. 。调用添加到旧类中的新方法。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
然后往另一个方向走……
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
如果通过 “Unix 时间” 你的意思是从 纪元参考 UTC 1970 年第一时刻 1970-01-01T00:00:00Z,然后调用 toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
如果您的意思是自 1970 年以 UTC 开始的毫秒数,则提取 Instant
. 。这 Instant
类代表时间线上的一个时刻 世界标准时间 分辨率为 纳秒 (最多九 (9) 位小数)。
Instant instant = zdt.toInstant() ;
现在 询问毫秒数.
long millisecondsSinceEpoch = instant.toEpochMill() ;
请记住,要求整秒或 毫秒 可能会导致数据丢失。这 ZonedDateTime
和 Instant
两者都解析为纳秒。所以任何 微秒 当您计算整个秒或毫秒时,可能存在的纳秒或纳秒将被忽略。
关于 java.time
这 java.time 框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程 遗产 日期时间类,例如 java.util.Date
, Calendar
, & SimpleDateFormat
.
这 乔达时间 项目,现在在 维护模式, ,建议迁移到 java.time 类。
要了解更多信息,请参阅 甲骨文教程. 。并在 Stack Overflow 上搜索许多示例和解释。规格为 JSR 310.
用一个 JDBC驱动程序 符合 数据库连接4.2 或者稍后,您可以交换 java.time 对象直接与您的数据库。不需要字符串也不需要 java.sql.* 类。
从哪里获取 java.time 类?
- Java SE 8, Java SE 9, , 然后
- 内置。
- 具有捆绑实现的标准 Java API 的一部分。
- Java 9 添加了一些小功能和修复。
- Java SE 6 和 Java SE 7
- 许多 java.time 功能都向后移植到 Java 6 和 7 三十后端口.
- 安卓
- 更高版本的 Android 捆绑了 java.time 类的实现。
- 对于早期的 Android, 三十ABP 项目适应 三十后端口 (上文提到的)。看 如何使用 ThreeTenABP....
这 三十额外 项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, , 和 更多的.