我试图将一个字符串解析为一个日期,它给了我正确的日期,其中时间错误。
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
似乎问题是你的模式String指定了am / pm,但是对于小时字符使用大写的H
。这些表示24小时制,显然不使用am / pm。将小时字符更改为小写h
,表示上午/下午(0-11)的小时。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm aaa");
docs for SimpleDateFormat
解释了各种可接受的模式字符。
试试下面的代码
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"));
试试这段代码,你错过了一些代码
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");
这段代码对我来说很好。