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
,其中as
HH
表示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");