java - 使用 Java 将 unix 纪元转换为人类可读时的日期不正确

标签 java android epoch

编辑:删除了“*1000”但仍然得到不正确的日期,但更新了下面的日志以显示我现在得到的内容。

下面是我的代码 fragment 和我的日志,我认为我正确地实现了它,所以我不知道为什么它没有给我正确的转换:

NewFoodItem foodItem = data.get(position);
String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (foodItem.date));
String a =  Integer.toString(foodItem.date);
Log.d("returnedDate:", a);
Log.d("formattedDate:", date);

它不会让我张贴图片,但日志看起来像这样:

D/returnedDate:  1409012824
D/formattedDate: 01/17/1970 02:23:32
D/returnedDate:  1409013004
D/formattedDate: 01/17/1970 02:23:33

最佳答案

Answer by Andrew T.正确:整数溢出。但是示例代码现在已经过时了。

java.time

现代方法使用 java.time 类。

Instant 类代表一个时刻。与 java.util.Date 一样,Instantepoch reference 开始计数1970 年第一时刻的 UTC,1970-01-01T00:00Z。但是 Instant 使用纳秒而不是毫秒的更精分割辨率。

L 附加到数字文字的末尾以指示 long 类型。在任何你想对数字进行分组的地方使用下划线,不添加任何意义(被编译器忽略)。

long input = 1_409_012_824L ;
Instant instant = Instant.ofEpochSecond( input ) ;

生成标准值的文本表示 ISO 8601格式。

String output = instant.toString() ;

2014-08-26T00:27:04Z

为了更灵活地生成文本,请转换为 OffsetDateTime

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

使用 DateTimeFormatter 自动本地化输出.

Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ).withLocale( locale ) ;
String output2 = odt.format( f ) ;

Aug 26, 2014, 12:27:04 AM

查看此 code run live at IdeOne.com .


Table of date-time types in Java, both modern and legacy.


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

Table of which java.time library to use with which version of Java or Android

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 使用 Java 将 unix 纪元转换为人类可读时的日期不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496568/

相关文章:

javascript - 如何在 Angular 中将纪元转换为可读日期以在 Chartist 中使用

java - 按顺序打印线程并为每个线程设置随机 sleep 时间

Java + Android Jetpack + Dagger 2 在 ViewModel 中注入(inject)

JavaScript 未在 HtmlUnit 中正确执行

android - 如何从手机通讯录中查找注册用户

android - 带有 AAR 的 gradle 构建失败,没有找到资源错误

python - 如何解决类型错误: cannot convert the series to <type 'float' >

没有结果的sql返回日期

java - 在 Berkeley DB JE 中进行比较和交换?

java.sql.SQLException : General error