Android 简单的日期格式给出了错误的时间
我试图将一个字符串解析为一个日期,它给出了正确的日期,而时间是错误的Android 简单的日期格式给出了错误的时间,android,simpledateformat,Android,Simpledateformat,我试图将一个字符串解析为一个日期,它给出了正确的日期,而时间是错误的 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
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
我想要的是8月20日星期四格林尼治标准时间05:00:00+2015年05:30
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 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");
这段代码对我来说很好。尝试设置时区。@JanithaR我改为
SimpleDataFormat formatter=new SimpleDataFormat(“yyy-MM-dd HH:MM a”,Locale.US)代码>但仍然存在相同的问题。我相信您的问题是指定am/pm,但您使用大写字母H
表示小时,表示24小时时钟。将它们改为小写的h
's.@MikeM。你说得对。实际上我不知道H
和H
之间的区别。谢谢lot@user3177222那是地点,我说的是时区。像这样formatter.setTimeZone(TimeZone.getTimeZone(“\u TimeZone here”)
也像Mike说的,删除aaa
,看看时间是否会以24小时格式正确出现。正如Mike已经说过的,我的问题是HH:mm aaa
。我使用的是AM/PM和HH
,其中asHH
表示24小时制。所以我改为hh:mm aaa
,我的问题解决了。@user3177222接受他的答案:)我将把我的答案留在这里,这样也许对其他人会有帮助。我仍然在等待他的答案接受:P他只在评论中解决了这个问题。
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");