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));
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プロジェクトを参照してください。したがって、最近、正直に言って、SimpleDateFormat
とDate
を引き続き使用するための言い訳はありません。新しいクラスは、プログラマー向けで、使いやすいです。
文字列から日付への変換やその逆を探しているのではなく、無効な日付などを処理する必要がない場合は、文字列操作が最も簡単で効率的な方法です。しかし、私はDateFormatを使用するよりも可読性と保守性がはるかに劣ります。
String dateInNewFormat = dateInOldFormat.substring(8)
+ dateInOldFormat.substring(4, 8)
+ dateInOldFormat.substring(0, 4)
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