Java 将系统的当前日期时间转换为纪元引用的秒数



我使用Facebook查询语言(FQL)来检索用户日期。我的FQL如下。

SELECT post_id , message 
FROM stream 
WHERE source_id = me() 
AND actor_id = me() 
AND created_time > 1221596000 

在这里,我感觉created_time是以秒为单位的。

我正在使用Java。有人能告诉我如何在Java中将系统当前日期和时间转换为created_time秒吗?

System.currentTimeMillis()是以毫秒为单位的历元。所以,给定一秒钟就是一千毫秒。您可以通过划分1000来轻松地转换它。或者我错过了什么?

将此System.currentTimeInMillis()除以1000。

tl;dr

Instant.now() 
       .getEpochSecond()

1519944626

java.time

现代方法使用java.time类。

Instant

Instant类表示以UTC为单位的时间线上的一个时刻,分辨率为纳秒(最多九(9)位小数)。

Instant instant = Instant.now() ;  // Capture current moment in UTC.

从epoch开始计数

您可以从UTC 1970年第一个时刻的历元参考(1970-01-01T00:00Z)中确定整秒数。小心数据丢失:您忽略了Instant对象值中可能存在的任何小数秒。

long secondsSinceEpoch = instant.getEpochSecond() ;  // Ignores any fractional second in your `Instant`. 

正在分析

您可以转向另一个方向,将这样的计数从epoch解析为Instant对象。

Instant instant = Instant.ofEpochSecond( yourCountFromEpochGoesHere ) ;

关于java.time

java.time框架构建在Java8及更高版本中。这些类取代了诸如java.util.DateCalendar和&CCD_ 10。

现在处于维护模式的JodaTime项目建议迁移到java.Time类。

要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR310。

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,也不需要java.sql.*类。

从哪里获得java.time类?

  • Java SE 8Java SE 9及更高版本
    • 内置
    • 标准Java API的一部分,带有捆绑实现
    • Java 9添加了一些小功能和修复程序
  • Java SE 6Java SE 7
    • 大部分java.time功能都是向后移植到Java6&7英寸ThreeTen背包
  • 安卓
    • java.time类的Android捆绑包实现的后续版本
    • 对于早期的Android,ThreeTenABP项目适用于ThreeTen Backport(如上所述)。请参阅如何使用ThreeTenABP…

ThreeTen Extra项目通过附加类扩展java.time。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等等。

最新更新