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

问题描述 投票:3回答:4

我试图将一个字符串解析为一个日期,它给了我正确的日期,其中时间错误。

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

android simpledateformat
4个回答
2
投票

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

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

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


1
投票

试试下面的代码

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

1
投票

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

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

0
投票

试试这段代码,你错过了一些代码

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

这段代码对我来说很好。

© www.soinside.com 2019 - 2024. All rights reserved.