java - 从字符串转换为日期对象不显示预期结果
问题描述
我搜索了解决方案但仍然无法正常工作,我正在尝试将日期对象的本地时区转换为 UTC +0,但是当我将日期对象格式化为 UTC 时,它正在工作。但是当我想再次将转换后的字符串转换为日期时,格式会发生变化,并且 UTC 在我将其存储在火存储之前会返回到 GMT+8。代码中有什么问题?
这是我得到的当前日期对象
Calendar time = Calendar.getInstance();
time.setTimeZone(TimeZone.getTimeZone("UTC"));
Date current_time = time.getTime();
如果打印
Thu Aug 22 10:09:55 GMT+08:00 2019
然后我将其转换为 UTC
String dismissal_time_firestore;
Log.i(TAG, "Current time when swiped from phone time.getTime() "+current_time);
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
dismissal_time_firestore = dateFormat.format(current_time);
明白啦
Thu, 22 Aug 2019 02:09:55 +0000
但是当我将此字符串转换为日期对象时
try {
current_time = dateFormat.parse(dismissal_time_firestore);
} catch (ParseException e) {
e.printStackTrace();
}
我懂了
Thu Aug 22 10:09:55 GMT+08:00 2019
解决方案
您正在使用糟糕的日期时间类,这些类在几年前被JSR 310 中定义的现代java.time类所取代。
您的主要问题是不了解该Date::toString
方法对您而言。它在生成文本时将 JVM 的当前时区动态应用到 UTC 时刻。从不使用此类的众多原因之一。
获取 UTC 中的当前时刻。
Instant instant = Instant.now() ;
在特定地区(时区)的人们使用的挂钟时间中查看那个时刻。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
生成文本以显示给用户。
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( Locale.CANADA_FRENCH ) ;
String output = zdt.format( f ) ;
您谈论解析格式化的字符串。馊主意。仅将日期时间值的文本表示视为输出,而不是输入。收集日期时间输入应该通过使用日期时间小部件来完成,而不是输入文本。
将日期时间值存储或交换为文本时,请始终使用ISO 8601标准格式。java.time类在解析/生成字符串时默认使用 ISO 8601 格式。因此无需指定任何格式模式。只需调用parse
/ toString
。示例:Instant.now().toString()
和Instant.parse( "2020-01-23T12:34:56.123456Z" )
。
我无法提供进一步的帮助,因为您并没有真正说出您要完成的工作。
所有这些都在 Stack Overflow 上多次介绍过。因此,搜索以了解更多信息。并在发布前搜索。
推荐阅读
- node.js - Express nodemail不在生产中发送电子邮件
- python - 熊猫可以进行这种转变吗?
- awk - 提取txt文件中starttext和endtext之间的跨度,正好n次
- python - 有哪些方法可以从用户输入中解析日期/时间?
- javascript - C++ 附加组件不在 express api 路由内部运行,但在外部运行
- oracle - Oracle Apex 发送附有交互式报告或区域的电子邮件
- r - 如何将单变量时间序列转换为 R 中的向量
- python - 使用欧几里得距离计算 2 个直方图之间的距离
- javascript - 覆盖expressjs中端点的响应状态
- reactjs - 下一个认证 | 当用户对象有太多项目时,会话请求没有数据