【问题标题】:Simple date formatting giving wrong time简单的日期格式给出错误的时间
【发布时间】:2015-08-20 11:00:03
【问题描述】:

我正在尝试将字符串解析为日期,它会在时间错误的情况下给我正确的日期。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm aaa");

try {

    Date date = formatter.parse("2015-08-20 05:00 AM");
    Log.e("date", date+"");           // Logcat printing Thu Aug 20 00:00:00 GMT+05:30 2015
} catch (ParseException e) {
    Log.e("Error",e.toString());
}

正如您所看到的,每次解析日期时间都显示00:00:00 我要的是Thu Aug 20 05:00:00 GMT+05:30 2015

【问题讨论】:

  • 尝试设置时区。
  • @JanithaR 我改成了SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm a",Locale.US);,但还是同样的问题。
  • 我相信您的问题是您指定了上午/下午,但您使用大写的 H 表示小时,这表示 24 小时制。将它们更改为小写 h's。
  • @MikeM。你是对的。其实我不知道H 和h 之间的区别。非常感谢
  • @user3177222 这是语言环境,我说的是时区。像这样 formatter.setTimeZone(TimeZone.getTimeZone("_timezone here_")); 也像 Mike 说的那样删除 aaa 看看时间是否会以 24 小时格式正确显示。

标签: android simpledateformat


【解决方案1】:

问题似乎在于您的模式字符串指定了上午/下午,但使用大写的H 表示小时字符。这些表示 24 小时制,显然不使用 am/pm。将小时字符更改为小写h's,以上午/下午 (0-11) 表示小时。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm aaa");

docs for SimpleDateFormat 解释了各种可接受的模式字符。

【讨论】:

    【解决方案2】:

    试试下面的代码

    SimpleDateFormat format = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss z");
    String dateToStr = format.format(new Date());
    System.out.println("dateToStr=>" + dateToStr);
    
    try {
            Date strToDate = format.parse(dateToStr);
            System.out.println("strToDate=>" + strToDate);
    } catch (ParseException e) {
            e.printStackTrace();
    }
    

    【讨论】:

      【解决方案3】:

      也许它与时区问题有关,您的输入是在哪个时区?我建议确保您的参数在 UTC 时区,然后使用这样的格式化程序:

      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm aaa");
      formatter .setTimeZone(TimeZone.getTimeZone("UTC"));
      

      【讨论】:

      • 正如迈克已经说过的,我的问题出在HH:mm aaa。我使用的是 AM/PM 和 HH 两者,因为 HH 是 24 小时制。于是我改成了hh:mm aaa,问题就解决了。
      • @user3177222 接受他的回答然后:) 我将把我的回答留在这里,也许它会帮助别人
      • 嗯,我还在等待他的回答接受:P 他只在评论中解决了这个问题。
      【解决方案4】:

      试试这段代码你漏掉了几行代码

      SimpleDateFormat mFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm aa",  Locale.getDefault());
      mFormatter.setTimeZone(TimeZone.getTimeZone("India"));
      Date startDate = mFormatter.parse("2015-08-20 05:00 AM");
      

      这段代码对我来说很好用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        • 2020-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多