java - 如何在 Java 中将 +0800 更改为 +0000?
问题描述
如何在 Java中更改2018-12-24 12:00:00 +0800
为?2018-12-23 16:00:00 +0000
private String currentDateandTime = new Date();
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
final DateFormat fullFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss XX", Locale.CHINA);
//dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
//fullFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
Date dateTest = dateFormat.parse(currentDateandTime);
currentDateandTime = fullFormat.format(dateTest);
当前日期时间结果
2018-12-24 12:00:00 +0800
解决方案
如果只想获取不同时区的同一个实例,可以这样:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss Z");
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2018-12-24 12:00:00 +0800", formatter);
ZonedDateTime dateTimeInDesiredZoned = offsetDateTime.atZoneSameInstant(ZoneId.of("UTC"));
// 2018-12-24 04:00:00 +0000
System.out.println(formatter.format(dateTimeInDesiredZoned));
但是,2018-12-24 12:00:00 +0800
和2018-12-23 16:00:00 +0000
瞬间不一样。它们之间有 12 小时的间隔,您需要减去这 12 小时。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss Z");
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2018-12-24 12:00:00 +0800", formatter);
offsetDateTime = offsetDateTime.minusHours(12);
ZonedDateTime dateTimeInDesiredZoned = offsetDateTime.atZoneSameInstant(ZoneId.of("UTC"));
// 2018-12-23 16:00:00 +0000
System.out.println(formatter.format(dateTimeInDesiredZoned));
推荐阅读
- python - 尽管已将其全球化,但在赋值之前引用局部变量时出错
- javascript - 如何在关联数组中合并重复项?
- sql - 根据另一个表中的值在一行中生成一个随机值
- c++ - C++ 中的内存模型和单例
- mysql - 如何编写 SQL 查询来计算三个连续值的平均值?
- java - 将密钥发送到您无法检查的文本框(使用 Java)
- django - 如何在 Docker 容器上运行 Django
- rstudio - 使用面板数据进行固定效应回归 - 输出中不包括虚拟变量
- c# - 创建一个 TopMost 不透明的可点击切换窗口
- c# - 我希望能够使用 id 或用户名验证登录表单,同时使用 c# 从 mysql 数据库获取数据