编辑:删除了“*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
一样,Instant
从 epoch 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 .
关于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 类?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 , 以及后来的 - 标准 Java API 的一部分,带有 bundle 实现。
- Java 9 添加了一些次要功能和修复。
- Java SE 6和 Java SE 7
- 在 ThreeTen-Backport 中,大部分 java.time 功能都向后移植到 Java 6 和 7。 .
- Android
- 更高版本的 Android bundle 实现 java.time 类。
- 对于早期的 Android (<26),ThreeTenABP项目改编ThreeTen-Backport (上文提到的)。参见 How to use ThreeTenABP… .
ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, 和 more .
关于java - 使用 Java 将 unix 纪元转换为人类可读时的日期不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496568/