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