我是 Java 的新手,我对使用 SimpleDateFormat
和 Calendar
有点不适应。我有一个日期对象,想提取 GMT 日期字符串,如 yyyy-MM-dd HH:mm:ss
。我住在德国,目前我们是 GMT +0200。例如,我的日期对象的时间是 2011-07-18 13:00:00
。我现在需要的是 2011-07-18 11:00:00
。我的时区的偏移量应该自动计算。
我试过这样的东西,但我猜某处有问题:
private String toGmtString(Date date){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
TimeZone timeZone = TimeZone.getDefault();
Calendar cal = Calendar.getInstance(new SimpleTimeZone(timeZone.getOffset(date.getTime()), "GMT"));
sd.setCalendar(cal);
return sd.format(date);
}
在某些设备上,日期字符串会像我希望的那样返回。在其他设备上,偏移量计算不正确,我从输入日期对象接收到日期和时间。你能给我一些提示或建议吗?我想我获取默认时区的方法行不通?
最佳答案
private String toGmtString(Date date){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sd.setTimeZone(TimeZone.getTimeZone("GMT"));
return sd.format(date);
}
您不需要创建一个新的 SimpleTimeZone
,因为您并不是在发明一个新的时区 - 有 2 个现有时区在您的程序中发挥作用,GMT 和您的默认时区。
您也不需要修改现有的日期对象,因为您不想表示不同的时间点 - 您只需要以不同的方式显示相同的时间点。
您需要做的就是告诉 SimpleDateFormat
在格式化时使用哪个时区。
关于java - 转换 GMT 日期时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730797/