web-dev-qa-db-ja.com

日付文字列を別の形式に変換する

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つを見つけることができませんでした。

ここの誰かが別の方法を知っていますか?

24
lobner

使用する 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));
44
duffymo

SimpleDateFormat( [〜#〜] api [〜#〜] )オブジェクトを使用して、StringをDateオブジェクトに変換することをお勧めします。次に、別のSimpleDateFormatオブジェクトを介して、非常に柔軟な文字列表現に変換できます。

これが最新の答えです。

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日時クラスがネイティブに「理解」する標準であるため、解析に明示的なフォーマッターは必要ありません。フォーマット用に1つだけ必要です。

この質問が2011年に尋ねられたとき、SimpleDateFormatも私が与えたであろう答えでした。新しい日付と時刻のAPIは、Java 8が2014年の初めにリリースされ、ThreeTen-BackportプロジェクトでJava 6および7にバックポートされました。 Android、ThreeTenABPプロジェクトを参照してください。したがって、最近、正直に言って、SimpleDateFormatDateを引き続き使用するための言い訳はありません。新しいクラスは、プログラマー向けで、使いやすいです。

3
Ole V.V.

文字列から日付への変換やその逆を探しているのではなく、無効な日付などを処理する必要がない場合は、文字列操作が最も簡単で効率的な方法です。しかし、私はDateFormatを使用するよりも可読性と保守性がはるかに劣ります。

String dateInNewFormat = dateInOldFormat.substring(8) 
                         + dateInOldFormat.substring(4, 8) 
                         + dateInOldFormat.substring(0, 4)
2
JB Nizet
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);

結果(日付文字列):1/20/1997

1
Krunal