在java中转换日期格式
我有一个日期值:-在java中转换日期格式,java,Java,我有一个日期值:-2019-09-30T00:00:00.000+05:30 我想转换成以下格式-dd-MMM-yyyy 我有代码: public static String parseDateAndTimeStringCust(String datestring) { if(datestring.length()>=10){ SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-d
2019-09-30T00:00:00.000+05:30
我想转换成以下格式-dd-MMM-yyyy
我有代码:
public static String parseDateAndTimeStringCust(String datestring) {
if(datestring.length()>=10){
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
String fDate = new SimpleDateFormat("dd MMM yyyy").format(dateFormat2.parse(datestring));
return fDate;
} catch (ParseException ex) {
ex.printStackTrace();
}
}
return datestring;
}
分析:
我使用的dateFormat2
错误
问题:
public static String parseDateAndTimeStringCust(String datestring) {
if(datestring.length()>=10){
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
String fDate = new SimpleDateFormat("dd MMM yyyy").format(dateFormat2.parse(datestring));
return fDate;
} catch (ParseException ex) {
ex.printStackTrace();
}
}
return datestring;
}
dd-MMM-yyyy
您应该使用
java.time
包中的类。
这就是你要找的
String str = "2019-09-30T00:00:00.000+05:30";
OffsetDateTime dt = OffsetDateTime.parse(str);
String out = dt.format(DateTimeFormatter.ofPattern("dd MMM yyyy"));
System.out.println(out);
请注意,实际输出取决于您的语言环境,但是您可以将locale
作为第二个参数提供给
还请注意,的单参数版本表示ISO\u OFFSET\u DATE\u TIME
格式
此外,上述方法的实际输出是否准确,取决于您希望如何处理时区偏移,即您希望将其转换为UTC还是忽略它。例如,如果转换为UTC,时间戳2019-09-30T00:00:00.000+05:30
实际上会落在9月29日(当时的时间是2019-09-29T18:30:00.000Z)
DateTimeFormatter
该类的文档包含有关格式化符号及其解析方式的详细信息。众所周知和常用的图案有许多预定义格式,例如符合标准。尝试更改以下行:
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
致:
请不要使用过时的
SimpleDateFormat
和Date
类。改用Java.Time
包中较新的Java日期和时间API。“我使用的日期格式2不正确”-您到底面临什么问题?您是否必须使用SimpleDateFormat
(在这种情况下,使用该类上的Javadoc作为参考)或者切换到新的日期api是一个选项(推荐)?“2019-09-30T00:00:00.000+05:30”-看看该日期:日期和时间之间没有空格,只有T
,它包含毫秒部分和时区偏移。因此,您用来解析的格式应该反映这一点,例如,类似于yyyy-MM-dd'HH:MM:ss.SSSXXX
这些可怕的类在几年前被JSR 310中定义的java.time类所取代。建议在2019年使用它们是一个糟糕的建议。这些糟糕的类在几年前被JSR310中定义的java.time类所取代。建议在2019年使用它们是一个糟糕的建议。参见MC皇帝的回答中的现代解决方案。
SimpleDateFormat dateFormat2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");