我想将日期字符串从"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");
29-SEP-2016 04-OCT-2016 29-SEP-2016 04-OCT-2016 06-OCT-2016 01-OCT-2016 03-OCT-2016而如果使用这行代码:
则输出结果为(正确的日期值) :SimpleDateFormat oracleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss");
23-SEP-2016 28-SEP-2016 23-SEP-2016 26-SEP-2016 26-SEP-2016 26-SEP-2016 26-SEP-2016我想知道为什么将"S(毫秒)"添加到格式字符串中会导致出现不正确的值。
编辑1:
即使"yyyy-MM-dd'T'kk:mm:ss.SSS"返回的结果也是不正确的。
编辑2:
我正在Android应用程序中使用此代码。它在模拟器(API 23)上完美地工作。对于某些设备,它显示不正确的日期。这是否与Java版本有关?
0
填充,直到你得到3个小数位。例如解析00:00:00.1
不会导致 "午夜后十分之一秒",而只是 "午夜后一毫秒(即以秒为单位的十进制表示00:00:00.001
)"。 - Adrian Colomitchi