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;
    }
}

しかし、他にもっとエレガントで効果的な方法はありますか? すなわち。いくつかの組み込み機能を使用していますか?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-DDISO 8601標準に準拠しているという事実を利用しています.ISO 8601標準は、最新のJavaの日付と時刻のクラスがネイティブに「理解」する標準です。

2011 年にこの質問がなされたとき、SimpleDateFormat私が答えたであろう答えでもありました。新しい日付と時刻の API は、2014 年初頭に Java 8 で登場し、ThreeTen-Backport プロジェクトで Java 6 および 7 にバックポートされました。Android の場合は、ThreeTenABP プロジェクトを参照してください。したがって、最近では正直に言って、まだSimpleDateFormatandを使用する言い訳はありませんDate。新しいクラスは、はるかにプログラマーにやさしく、操作しやすくなっています。

于 2017-06-30T16:48:30.980 に答える
4

SimpleDateFormat ( API ) オブジェクトを使用して String を Date オブジェクトに変換することをお勧めします。その後、別の SimpleDateFormat オブジェクトを介して任意の String 表現に変換できるため、非常に柔軟に対応できます。

于 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 に答える