java - 两个不同时区之间的时差计算?
问题描述
我想计算两个不同时区之间的时差,例如 country1 (GMT+05:30) 和 country2 (GMT+05:00)。如何计算它。提前致谢。
解决方案
您可以使用它以ISO-8601 标准java.time.Duration
为模型并作为JSR-310 实现的一部分与Java-8一起引入。Java-9引入了一些更方便的方法。
import java.time.Duration;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(formatDuration(diffBetweenTimeZones("GMT+05:30", "GMT+05:00")));
System.out.println(formatDuration(diffBetweenTimeZones("GMT+05:00", "GMT+05:30")));
// You can use the returned value to get the ZoneOffset which you can use for
// various kinds of processing e.g.
ZoneOffset offset = ZoneOffset.of(formatDuration(diffBetweenTimeZones("GMT+05:30", "GMT+05:00")));
System.out.println(offset);
System.out.println(OffsetDateTime.now(offset));
}
static Duration diffBetweenTimeZones(String tz1, String tz2) {
LocalDate today = LocalDate.now();
return Duration.between(today.atStartOfDay(ZoneId.of(tz1)), today.atStartOfDay(ZoneId.of(tz2)));
}
static String formatDuration(Duration duration) {
long hours = duration.toHours();
long minutes = duration.toMinutes() % 60;
String symbol = hours < 0 || minutes < 0 ? "-" : "+";
return String.format(symbol + "%02d:%02d", Math.abs(hours), Math.abs(minutes));
// ####################################Java-9####################################
// return String.format(symbol + "%02d:%02d", Math.abs(duration.toHoursPart()),
// Math.abs(duration.toMinutesPart()));
// ####################################Java-9####################################
}
}
输出:
+00:30
-00:30
+00:30
2021-03-24T10:37:31.056405+00:30
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
请注意,java.util
日期时间 API 已过时且容易出错。建议完全停止使用它并切换到现代日期时间 API *。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
推荐阅读
- javascript - 从 SweetAlert 中删除较深/灰色的背景
- c++ - OpenGL - 最大化/最小化输出窗口调整内部对象的大小。我怎样才能避免这种情况?
- azure - Terraform - Azure - VNET 对等互连难题
- javascript - 使用用户输入从 Mat Chip 列表中添加/删除项目
- java - ArrayList 继承实现
- javascript - 转到下一条指令,直到函数完成(Node Js)
- javascript - JSTree Three_State 和 uncheck_node
- mysql - 合并 MySQL SELECT 语句
- jupyter-notebook - 降级 nbformat 以防止“笔记本 JSON 无效”错误
- mongodb - 检索每个组中的最后一条记录 - MongoDB