【问题标题】:SimpleDateFormat changing timezone of dateSimpleDateFormat 更改日期的时区
【发布时间】:2017-09-21 20:54:52
【问题描述】:
Date mDate;
public static final String DATE_FORMAT = "EEE, dd MMM yyyy hh:mm:ss Z";
String stringDate = "Thu, 21 Sep 2017 18:15:00 +0200";
final SimpleDateFormat SDF = new SimpleDateFormat(DATE_FORMAT,Locale.ENGLISH);
mDate = SDF.parse(stringDate);

stringDate = "Thu, 21 Sep 2017 18:15:00 +0200"
mDate result string representation = "Thu Sep 21 19:15:00 GMT+03:00 2017"

你可以看到时区和小时改变了,我不知道为什么。

环境是运行在安卓设备上的android studio。

我尝试更改LocaleSDF.setTimeZone() 和其他一些不同的选项,但结果始终相同。
有任何想法吗?

谢谢

【问题讨论】:

  • toString() 的实现 Date 总是在默认时区呈现字符串。这是它可以做的唯一事情,因为Date 对象没有时区。如果您希望日期值显示在另一个时区,则需要使用具有适当时区的格式化程序。

标签: java date


【解决方案1】:

好吧,问题实际上出在Date 对象中,它只是为所有toString 方法使用了默认时区。

在 Andreas 的帮助下找到了我想要的东西:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    df.setTimeZone(TimeZone.getTimeZone("GMT+2")); // set whatever timezone you want.
    String resultString = df.format(mDate);

resultString = 2017-09-21 18:15:00

【讨论】:

  • 您根本不应该使用这些麻烦的旧类,它们现在是遗留的,被 java.time 类所取代。请参阅适用于 Android 的 ThreeTenABP 项目,p.在 Stack Overflow 中搜索类名 Instant、ZoneId、ZonedDateTime 和 DateTimeFormatter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多