24

我有一个包含日期格式的字符串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;
    }
}

但是还有其他更优雅、更有效的方法吗?IE。使用一些内置功能?我一直无法找到一个,同时快速搜索 API。

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

4

5 回答 5

44

使用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));
于 2011-07-09T21:10:43.577 回答
5

这是现代答案。

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

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

当这个问题在 2011 年被问到时,SimpleDateFormat这也是我会给出的答案。较新的日期和时间 API 于 2014 年初随 Java 8 一起推出,并且在 ThreeTen-Backport 项目中也被向后移植到 Java 6 和 7。对于 Android,请参阅 ThreeTenABP 项目。SimpleDateFormat所以这些天老实说,我看不出仍然使用and的借口Date。较新的类对程序员更友好,更易于使用。

于 2017-06-30T16:48:30.980 回答
4

最好使用 SimpleDateFormat ( API ) 对象将 String 转换为 Date 对象。然后,您可以通过另一个 SimpleDateFormat 对象转换为您希望为您提供极大灵活性的任何字符串表示形式。

于 2011-07-09T21:10:11.080 回答
2

如果您不是在寻找字符串到日期的转换,反之亦然,因此不需要处理无效日期或任何东西,字符串操作是最简单和最有效的方法。但与使用 DateFormat 相比,我的可读性和可维护性要差得多。

String dateInNewFormat = dateInOldFormat.substring(8) 
                         + dateInOldFormat.substring(4, 8) 
                         + dateInOldFormat.substring(0, 4)
于 2011-07-09T21:11:57.493 回答
1
import java.util.DateFormat;   

// Convert String Date To Another String Date
public String convertStringDateToAnotherStringDate(String stringdate, String stringdateformat, String returndateformat){        

        try {
            Date date = new SimpleDateFormat(stringdateformat).parse(stringdate);
            String returndate = new SimpleDateFormat(returndateformat).format(date);
            return returndate;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "";
        }

}

//-------
String resultDate = convertStringDateToAnotherStringDate("1997-01-20", "yyyy-MM-dd", "MM/dd/yyyy")
System.out.println(resultDate);

结果(日期字符串):01/20/1997

于 2017-06-22T15:02:58.140 回答