答案 0 :(得分:3)
关于日期时间的最佳做法,已经有几个主题,例如: Daylight saving time and time zone best practices
我建议如下:
根据我的经验,最好让客户端处理所有本地日期时间/区域转换,并承诺将UTC用于所有通信和后端用例。
如果您想将日期直接转储到网页中,可以使用http://momentjs.com/之类的js库将其转换为区域设置日期时间。
答案 1 :(得分:0)
您可以创建Utility(通用方法)以使用时区转换日期 下面是一些转换的例子。
public static Date buildUTCDate(String dateString) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormat.parse(dateString);
}
public static String dateToString(Date date) {
return new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT).format(date);
}
public static Date buildUTCDate(Date date) {
SimpleDateFormat fromDateFormat = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT);
SimpleDateFormat toDateFormat = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT);
toDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateString = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT).format(date);
try {
return fromDateFormat.parse(toDateFormat.format(fromDateFormat.parse(dateString)));
} catch (ParseException e) {
LOGGER.error("ParseException in buildUTCDate()", e);
}
return null;
}
public static Date getCurrentTimeZoneDate(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if (z.inDaylightTime(new Date())) {
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;
c.add(Calendar.HOUR_OF_DAY, (+offsetHrs));
c.add(Calendar.MINUTE, (+offsetMins));
return c.getTime();
}
public static String toLocalTime(Date dateUTC) {
if (dateUTC == null) {
return StringUtils.EMPTY;
}
SimpleDateFormat dateFormat = new SimpleDateFormat(SecureCareConstant.WEB_SERVICE_DATE_FORMAT);
return dateFormat.format(new Date(dateUTC.getTime() + TimeZone.getDefault().getOffset(dateUTC.getTime())));
}