我需要的一种转换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() ;

请记住,要求整秒或 毫秒 可能会导致数据丢失。这 ZonedDateTimeInstant 两者都解析为纳秒。所以任何 微秒 当您计算整个秒或毫秒时,可能存在的纳秒或纳秒将被忽略。


关于 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.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval, YearWeek, YearQuarter, , 和 更多的.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top