首页  >  文章  >  Java  >  为什么我的 Java 代码错误地将日期和时间转换为 CST?如何修复它?

为什么我的 Java 代码错误地将日期和时间转换为 CST?如何修复它?

Linda Hamilton
Linda Hamilton原创
2024-10-26 22:09:29489浏览

Why is my Java code converting date and time to CST incorrectly, and how can I fix it?

在 Java 中将日期和时间转换为特定时区

此 Java 程序旨在将当前系统日期和时间转换为特定时区。但是,提供的代码会产生不正确的结果,显示从印度转换为中部标准时间 (CST) 时存在时间差异。

了解时区转换

时区是偏远地区使用相同的标准时间。计算另一个时区的等效时间时,您必须调整时区偏移和夏令时 (DST) 设置的差异。

分析代码

代码依赖 SimpleDateFormat 和 Calendar 类来操作日期和时间值。它尝试使用以下步骤将当前系统时间转换为 CST:

  1. 使用 Calendar 检索当前日期和时间。
  2. 使用 SimpleDateFormat 将日期和时间解析为字符串。
  3. 使用 TimeZone 获取 CST 时区,并将其设置为 SimpleDateFormat 对象的时区。
  4. 使用 CST 时区解析日期和时间字符串。
  5. 打印转换后的日期

解决差异

出现差异的原因是代码未正确调整时区偏移和 DST 设置。提供的代码仅针对原始时区偏移进行调整,但不考虑 DST。

解决方案

要解决此问题,代码应针对原始时区进行调整抵消和 DST 节省。以下更正后的代码演示了这些调整:

<code class="java">Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");

// Adjust for raw time zone offset
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);

// Adjust for daylight saving time
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}

// Adjust to target time zone
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());</code>

通过添加这些调整,代码将准确地将日期和时间转换为指定的时区,包括 DST 调整。

以上是为什么我的 Java 代码错误地将日期和时间转换为 CST?如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn