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

时间:2011-07-09 21:07:59

标签: java date android-date

我有一个字符串,其中包含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时,我无法找到它。

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

5 个答案:

答案 0 :(得分: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));

答案 1 :(得分:4)

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

答案 2 :(得分:3)

这是现代的答案。

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项目。所以现在老实说,我没有理由继续使用SimpleDateFormatDate。较新的课程对程序员更友好,更适合工作。

答案 3 :(得分:2)

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

String dateInNewFormat = dateInOldFormat.substring(8) 
                         + dateInOldFormat.substring(4, 8) 
                         + dateInOldFormat.substring(0, 4)

答案 4 :(得分: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