方法一:
public static void main(String[] args) {
// 假设这是从MySQL获取的UTC时间字符串
String utcTimeStr = "2024-09-30T16:00:00Z";
try {
// 解析UTC时间字符串
DateTime parsedDateTime = DateUtil.parse(utcTimeStr);
// 转换为指定时区时间
DateTime shanghaiDateTime = DateUtil.convertTimeZone(parsedDateTime, ZoneId.of("Asia/Shanghai"));
// 转换为GMT时间
DateTime gmtDateTime = DateUtil.convertTimeZone(parsedDateTime, ZoneId.of("Etc/GMT"));
// 格式化输出
System.out.println("格式化输出"+shanghaiDateTime);
// 输出GMT时间
System.out.println("输出GMT时间"+gmtDateTime);
// 格式化输出
String format1 = DateUtil.format(shanghaiDateTime, "yyyy-MM-dd HH:mm:ss");
String format2 = DateUtil.format(gmtDateTime, "yyyy-MM-dd HH:mm:ss");
// 输出转换后的时间字符串
System.out.println("格式化[Asia/Shanghai]输出"+format1);
// 输出GMT时间字符串
System.out.println("格式化[Etc/GMT]输出"+format2);
} catch (Exception e) {
System.err.println("时间解析或转换失败: " + e.getMessage());
}
}
控制台输出如下:
格式化输出2024-10-01 00:00:00
输出GMT时间2024-09-30 16:00:00
格式化[Asia/Shanghai]输出2024-10-01 00:00:00
格式化[Etc/GMT]输出2024-09-30 16:00:00
方法二:
/**
* 时间字符串转换为指定时区时间字符串
* @param dateStr 时间字符串
* @param zoneId 时区ID
* @return 指定时区时间字符串
*/
private static String timeZoneConvert(String dateStr, String zoneId) {
DateTime parse = DateUtil.parse(dateStr);
log.info("原始时间:{}", parse);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
// 设置时区:例如:Asia/Shanghai
sdf.setTimeZone(TimeZone.getTimeZone(zoneId));
String str = sdf.format(parse);
log.info("转换后时间:{}", str);
return str;
}
public static void main(String[] args) {
// UTC时间字符串转化为指定时区时间字符串
String dateStr = "2024-09-30T16:00:00Z";
// 时区ID
String zoneId = "GMT+8";
// 时间转换处理
String dateFormatStr = timeZoneConvert(dateStr, zoneId);
// 输出转换后的时间字符串
System.out.println("原始时间字符串:" + dateStr);
// 输出转换后的时间字符串
System.out.println("转换后的时间字符串:" + dateFormatStr);
}
控制台输出如下:
0:54:12.158 [main] INFO com.songwp.test.Test05 - 原始时间:2024-09-30 16:00:00
10:54:12.161 [main] INFO com.songwp.test.Test05 - 转换后时间:2024-10-01 00:00:00
原始时间字符串:2024-09-30T16:00:00Z
转换后的时间字符串:2024-10-01 00:00:00