java - 如何在没有时区偏移的情况下将日期转换为毫秒?
问题描述
我如何将选定的日期转换为没有时区差异的毫秒。下面是我的代码。
String selectedDate=Jan 18, 2020;
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy", Locale.US);
Date date = format.parse(selectedDate);
在跑步时,我得到的日期类似于 Sat Jan 18 00:00:00 GMT+05:30 2020。但我希望没有像 2020 年 1 月 18 日这样的时区差异。
解决方案
对于 0 与 UTC 的差异:
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM dd, uuuu", Locale.ENGLISH);
String selectedDate = "Jan 18, 2020";
ZonedDateTime zdt = LocalDate.parse(selectedDate, dateFormatter)
.atStartOfDay(ZoneOffset.UTC);
System.out.println(zdt);
long millisSinceEpoch = zdt.toInstant().toEpochMilli();
System.out.println(millisSinceEpoch);
此 snpipet 的输出是:
2020-01-18T00:00Z 1579305600000
我正在使用 java.time,这是现代 Java 日期和时间 API。您使用的类SimpleDateFormat
和Date
设计不佳且早已过时,不应再使用它们。
问题:java.time 不需要 Android API 级别 26 吗?
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
- 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
- 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
- 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从
org.threeten.bp
子包中导入日期和时间类。
链接
- Oracle 教程:日期时间解释如何使用 java.time。
- Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
推荐阅读
- ansible - 如何杀死ansible中的异步进程?
- quarkus-panache - 如何按特定字段过滤 PanacheQuery?
- javascript - Prestashop - 当有产品定制字段时显示警告
- python - 如何使用 Peewee Flask 创建页面分页?
- javascript - 如何在我的网站 loadinf 屏幕中添加 .gif
- java - Spring接口驱动控制器的使用
- python - 如何在python的文件处理中保存迭代输入
- logging - 在 Confluence 中更改日志格式
- c# - WPF LiveChart:如何删除默认轴标签值
- javascript - Javascript从多个文件夹中选择多个文件