简单的日期格式给出错误的时间

Simple date formatting giving wrong time

我正在尝试将一个字符串解析为一个日期,它在时间错误的情况下为我提供了正确的日期。

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

试试下面的代码

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();
}

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

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

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

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

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

试试这个代码你错过了一些代码行

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");

这段代码对我来说工作正常。