java - 转换 GMT 日期时间字符串

标签 java android date simpledateformat gmt

我是 Java 的新手,我对使用 SimpleDateFormatCalendar 有点不适应。我有一个日期对象,想提取 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/

相关文章:

java - 在哪里可以下载 JBoss Developer Studio 2.0 GA?

java - 如何更改 RecyclerView 隐藏项的可见性?

android - fragment 在移除和动画结束后闪烁

java - 在 Java 中使用 STR_TO_DATE 插入日期,使用 PreparedStatement

ios - 获取日历月的第一个星期一

java - 使用 javax.inject.Provider 代替 <lookup-method>

java - 使用带有 Kerberos 身份验证的 JDBC 连接到 Hive 时出现问题

android - 必需的自定义属性

PHP 将秒转换为 MM :DD:HH:MM:SS

java - 客户端在不接受的情况下连接到 ServerSocket - 为什么?