简单的日期格式给出错误的时间
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");
这段代码对我来说工作正常。
我正在尝试将一个字符串解析为一个日期,它在时间错误的情况下为我提供了正确的日期。
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");
这段代码对我来说工作正常。