【发布时间】:2016-09-29 07:34:08
【问题描述】:
我想将日期字符串从 "2016-09-23T09:14:52.555000000" 格式解析为 "23-SEP-2016" 格式。
这是我的代码:
public class Tester {
public static void main(String[] args) {
System.out.println(displayDate("2016-09-23T09:14:52.555000000"));
System.out.println(displayDate("2016-09-28T11:56:24.552000000"));
System.out.println(displayDate("2016-09-23T09:29:12.507000000"));
System.out.println(displayDate("2016-09-26T14:55:02.702000000"));
System.out.println(displayDate("2016-09-26T09:50:24.880000000"));
System.out.println(displayDate("2016-09-26T15:20:49.397000000"));
System.out.println(displayDate("2016-09-26T15:21:21.559000000"));
}
public static String displayDate(String dateString) {
String formattedDateString = "NA";
if(dateString == null) {
return formattedDateString;
}
SimpleDateFormat oracleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss.S");
SimpleDateFormat dateFormatToDisplay = new SimpleDateFormat("dd-MMM-yyyy");
try {
Date date = oracleDateFormat.parse(dateString);
formattedDateString = dateFormatToDisplay.format(date).toUpperCase();
} catch (ParseException e) {
e.printStackTrace();
}
return formattedDateString;
}
}
问题是如果我使用这条线
SimpleDateFormat oracleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss.S");
输出是(日期值不正确):
2016 年 9 月 29 日 2016 年 10 月 4 日 2016 年 9 月 29 日 2016 年 10 月 4 日 2016 年 10 月 6 日 2016 年 10 月 1 日 2016 年 10 月 3 日而如果使用这一行
SimpleDateFormat oracleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss");
输出是(正确的日期值)
2016 年 9 月 23 日 2016 年 9 月 28 日 2016 年 9 月 23 日 2016 年 9 月 26 日 2016 年 9 月 26 日 2016 年 9 月 26 日 2016 年 9 月 26 日我想知道为什么在格式字符串中添加 "S (Millisecond)" 会导致值不正确。
编辑1:
即使是 "yyyy-MM-dd'T'kk:mm:ss.SSS" 也会返回不正确的值。
编辑2:
我在 Android 应用程序中使用此代码。它在模拟器(API 23)上完美运行。对于某些设备,它显示的日期不正确。可以和Java版本有关吗?
【问题讨论】:
标签: java android date datetime