将日期字符串转换为其他格式

2022-09-01 20:05:57

我有一个字符串,其中包含格式为的日期。YYYY-MM-DD

您如何建议我以最佳方式将其转换为格式?DD-MM-YYYY

这就是我天真地这样做的方式:

import java.util.*;
public class test {
    public static void main(String[] args) {
         String date = (String) args[0]; 
         System.out.println(date); //outputs: YYYY-MM-DD
         System.out.println(doConvert(date)); //outputs: DD-MM-YYYY
    }

    public static String doConvert(String d) {
         String dateRev = "";
         String[] dateArr = d.split("-");
         for(int i=dateArr.length-1 ; i>=0  ; i--) {
             if(i!=dateArr.length-1)
                dateRev += "-";
             dateRev += dateArr[i];
         }
    return dateRev;
    }
}

但是,有没有其他更优雅,更有效的方法可以做到这一点呢?即。使用一些内置功能?我无法找到一个,同时快速搜索API。

这里有人知道另一种方式吗?


答案 1

用:java.util.DateFormat

DateFormat fromFormat = new SimpleDateFormat("yyyy-MM-dd");
fromFormat.setLenient(false);
DateFormat toFormat = new SimpleDateFormat("dd-MM-yyyy");
toFormat.setLenient(false);
String dateStr = "2011-07-09";
Date date = fromFormat.parse(dateStr);
System.out.println(toFormat.format(date));

答案 2

这是现代的答案。

private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");

public static String doConvert(String d) {
    return LocalDate.parse(d).format(formatter);
}

有了这个,我们可以这样做,例如:

    System.out.println(doConvert("2017-06-30"));

这打印

30-06-2017

我正在利用这样一个事实,即您拥有的格式符合ISO 8601标准,这是现代Java日期和时间类本身“理解”的标准,因此我们不需要用于解析的显式格式化程序,只需要一个用于格式化的格式化程序。YYYY-MM-DD

当这个问题在2011年被问到时,也是我本来会给出的答案。较新的日期和时间API在2014年初与Java 8一起问世,并且在ThreeTen-Backport项目中也向后移植到Java 6和7。对于 Android,请参阅 ThreeTenABP 项目。所以这些天老实说,我认为没有理由继续使用和。较新的类对程序员更友好,使用起来也很好。SimpleDateFormatSimpleDateFormatDate