【发布时间】:2019-05-03 14:11:31
【问题描述】:
我正在使用 Yahoo 天气 API 构建一些简单的应用程序。在 JSON 接收器中有pubDate 字段(根据文档)在RFC 882 中(看起来像"pubDate":1546992000)。有谁知道如何在android中将这样的日期转换为日期?
【问题讨论】:
我正在使用 Yahoo 天气 API 构建一些简单的应用程序。在 JSON 接收器中有pubDate 字段(根据文档)在RFC 882 中(看起来像"pubDate":1546992000)。有谁知道如何在android中将这样的日期转换为日期?
【问题讨论】:
应该是这样的:
new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date( [yourDateValue] * 1000L))
您可以在这里测试结果:https://www.unixtimeconverter.io/ [在此处插入您的 pubDate]
【讨论】:
java.util.Date、java.util.Calendar 和 java.text.SimpleDateFormat 等麻烦的日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。进一步适用于ThreeTenABP 中的早期 Android (How to use ThreeTenABP…。
试试这个:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(yourDateValue)));
您可以从here 检查并转换毫秒为日期。当我写下你的转换参考值时,它给了我一个 1970 年的日期。你必须在你的值末尾添加“000”或乘以 1000 以获得正确的日期。
【讨论】:
Instant.ofEpochSecond(
Long.parseLong( "1546992000" )
)
…表示UTC 中 2019 年 1 月 1 日的第一个时刻。
2019-01-09T00:00:00Z
现代方法使用 java.time 类,多年前取代了可怕的 Date/Calendar/SimpleDateFormat 类。
假设1546992000 表示自UTC 1970 年第一刻的纪元参考以来的整秒数,则解析为Instant。
Instant instant = Instant.ofEpochSecond( 1_546_992_000L );
instant.toString(): 2019-01-09T00:00:00Z
要通过特定地区(时区)的人们使用的挂钟时间查看那个时刻,请调整为 ZonedDateTime 实例。
ZoneId z = ZoneId.of( "Africa/Casablanca" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
ZonedDateTime.toString(): 2019-01-09T01:00+01:00[非洲/卡萨布兰卡]
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 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
【讨论】: