【问题标题】:Java String to Date without timezone [duplicate]没有时区的Java字符串到日期[重复]
【发布时间】:2018-05-08 10:35:55
【问题描述】:

我有日期像字符串200901

在 android 设备上,我将其转换为日期:

private static final SimpleDateFormat CARD_DATE_FORMAT = new SimpleDateFormat("yyMMdd", Locale.getDefault());
 public static Date toCardDateFormat(String date) {
        try {
            return CARD_DATE_FORMAT.parse(date);
        } catch (ParseException e) {
            return null;
        }
    }

我得到日期:Tue Sep 01 00:00:00 GMT+07:00 2020

之后,我将此日期传递给 spring 控制器,在控制器方法中,我的日期如下:Mon Aug 31 20:00:00 GMT+03:00 2020

【问题讨论】:

  • 如何将date 传递回Spring 控制器?
  • 我建议你避免使用SimpleDateFormat 类。它不仅与Date 一起已经过时,而且还出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。顺便说一句,Date 没有时区。不能有。
  • 固溶是使用LocalDate from java.time。这是没有时间和时区的日期。没有混淆的余地。 :-)
  • 对于早期的 Android,您应该使用适应 ThreeTen-Backport 项目的 ThreeTenABP 项目。永远不要使用最初与 Java 的最早版本捆绑在一起的非常麻烦的遗留日期时间类。

标签: java date simpledateformat


【解决方案1】:

您正在解析默认时区中的日期,这将取决于为设备配置的时区,但它似乎是GMT+7

看起来运行 Spring 的服务器位于 GMT+3 时区,当它在 默认时区打印日期时,它就是使用该时区。

2020-09-01T00:00:00+07:002020-08-31T20:00:00+03:00所代表的实际瞬间是一样的。

整个查询是两台不同的计算机将同一时刻打印为按其本地时区格式化的日期的结果。

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多