java不同时区时间转换,Java不同时区(timezone)之间时间转换
最近遇到的问题是:我们的系统在海外打印的日志记录受到时区差异的影响与国内时间不一致而导致使用不便。我们希望海外的日志记录与国内时间保持一致,并要求将不同时区的时间进行转换调整以统一为 domestic time standards. 一、关于 Time Zones 的一些概念
1.1 什么是时区
timezone亦即由于世界各国家与地区经度不同 各地的地方时各有差异 按照经度将全球划分为24个时区。
常见的时区通常使用特定的英文字母缩写如GMT,UTC,CST等,并具体参考此处
1.2 什么是夏令时
因此被称为Daylight Saving Time(简称DST)的文章阐述了为何实行夏令时、何时进行表的调整以及为何选择在午夜两点进行调整。反对者认为实施的某些方面并不实用,并发表了一些论文支持这一观点。
二、如何在不同时区之间转换时间
上文阐述了不同地区以及夏令时的差异,即在进行时区转换的过程中需注意这两个关键点。其核心思路在于确保时间转换的准确性。
确定源地与GMT的时间差值 包括夏令制的影响 确定目的地与GMT的时间差值 同样也考虑夏令制的影响 计算当前时间减去 源地与GMT的时间差 和 目的地与GMT的时间差
代码如下所示
public class TimeZoneTransform {
私有静态字符串dateToTimeZ转换器接收日期源日期和格式化日期对象。
TimeZone sourceTimeZone, TimeZone targetTimeZone) {
计算targetTime等于sourceDate的时间值减去源时区的时间偏移量再减去目标时区的时间偏移量
return getTime(new Date(targetTime), formatter);
private static String getTime(Date date, DateFormat formatter) {
return formatter.format(date);
private static String getTimeZone() {
Calendar cal Calendar.getInstance();
// getOffset will access to offset and contains DaylightTime
int timeZone cal.getTimeZone().getOffset(System.currentTimeMillis()) / (3600000);
if (timeZone 0) {
return String.valueOf( timeZone);
return String.valueOf(timeZone);
public static String fetchGreenwichMeanTimeString(Date date, SimpleDateFormat formatter) {
TimeZone srcTimeZone TimeZone.getTimeZone( GMT getTimeZone());
TimeZone destTimeZone TimeZone.getTimeZone( GMT 8
该日期格式转换函数将根据指定的时间格式、时间格式转换器以及源时区和目标时区来处理输入日期。
public static void main(String[] args) {
调用getGMTTime方法并传递由新 Date对象生成的时间戳和指定的日期和时间格式化字符串

三、Java中关于时间处理的类
关于Date Calendar LocalDate/LocalTime的介绍文章。
参考资料
Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
[完]
pip 安装使用 ImportError: No module named setuptools 解决方法

78210
责任编辑:xiaochao
