📜  如何在Java中将当地时间转换为 GMT?(1)

📅  最后修改于: 2023-12-03 15:38:34.122000             🧑  作者: Mango

如何在Java中将当地时间转换为 GMT?

在Java中,可以使用java.util.TimeZonejava.util.Calendar来将当地时间转换为GMT。

使用TimeZone和Calendar
// 获取当前时区
TimeZone local = TimeZone.getDefault();

// 获取当前时间的Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置TimeZone为GMT
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));

// 获取当地时间
Date localTime = calendar.getTime();

// 获取GMT时间
long gmtTime = localTime.getTime() - local.getRawOffset();

// 根据GMT时间创建新的Date对象
Date gmtDate = new Date(gmtTime);

代码解释:

  1. 首先获取当前的时区,即当地的时区。
  2. 创建一个Calendar对象,并设置TimeZone为GMT,表示要将时间转换为GMT时间。
  3. 获取当前时刻的Date对象,即当地时间。
  4. 计算出当前时刻的GMT时间。
  5. 根据GMT时间创建新的Date对象,即GMT时间对象。
使用DateFormatter

Java 8以后,也可以使用java.time包中的LocalDateTimeZonedDateTime类以及DateTimeFormatter类进行日期时间格式化。

// 获取当前时刻的LocalDateTime对象
LocalDateTime localDateTime = LocalDateTime.now();

// 将LocalDateTime对象加上时区信息
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());

// 格式化日期时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String localTimeFormatted = zonedDateTime.format(formatter);

// 将当前时刻的Date对象转换为GMT时间的Date对象
Date gmtDate = Date.from(zonedDateTime.toInstant().minusMillis(zonedDateTime.getOffset().getTotalSeconds() * 1000));

// 将GMT时间格式化为字符串
SimpleDateFormat gmtDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
gmtDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String gmtTimeFormatted = gmtDateFormat.format(gmtDate);

代码解释:

  1. 首先获取当前时刻的LocalDateTime对象,即当地时间。
  2. 将LocalDateTime对象加上时区信息,形成ZonedDateTime对象。
  3. 使用DateTimeFormatter类格式化当地时间。
  4. 将ZonedDateTime对象转换为GMT时间的Date对象。
  5. 使用SimpleDateFormat类格式化GMT时间为字符串。
注意事项

在使用Java进行日期时间转换时,需要注意以下几点:

  1. 时区信息是必须的,否则无法准确地转换日期时间。
  2. 日期时间格式需要统一,否则可能会出现转换错误。
  3. Java中的日期时间类都是线程安全的,可以在多线程环境下使用。