Java.util.Date
という形式のyyyy-mm-dd
があります。 mm-dd-yyyy
の形式にしたい
以下は、この変換のために試したutilのサンプルです。
// Setting the pattern
SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
// myDate is the Java.util.Date in yyyy-mm-dd format
// Converting it into String using formatter
String strDate = sm.format(myDate);
//Converting the String back to Java.util.Date
Date dt = sm.parse(strDate);
それでも私が得ている出力はmm-dd-yyyy
のフォーマットではありません。
Java.util.Date
をyyyy-mm-dd
からmm-dd-yyyy
にフォーマットする方法を教えてください
Date
は、UNIXエポック(1970年1月1日、00:00:00 UTC)から経過したミリ秒数のコンテナです。
フォーマットの概念はありません。
LocalDateTime ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt));
System.out.println(ldt);
出力...
05-11-2018
2018-05-11
2018-05-11T17:24:42.980
あなたは ThreeTen Backport を利用するべきです
例えば...
Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);
出力...
Wed Aug 28 16:20:39 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 16:20:39 EST 2013
基礎となるDate
値を変更したフォーマットはありません。これがDateFormatter
sの目的です
追加の例で更新しました
念のために、最初の例は意味がありません...
この例では、2つのフォーマッターを使用して同じ日付をフォーマットしています。次に、これらの同じフォーマッタを使用してString
の値をDate
sに解析します。結果の解析によって、Date
がその値を報告する方法は変わりません。
Date#toString
はその内容の単なるダンプです。これは変更できませんが、Date
オブジェクトは好きなようにフォーマットできます。
try {
Date myDate = new Date();
System.out.println(myDate);
SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy");
SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd");
// Format the date to Strings
String mdy = mdyFormat.format(myDate);
String dmy = dmyFormat.format(myDate);
// Results...
System.out.println(mdy);
System.out.println(dmy);
// Parse the Strings back to dates
// Note, the formats don't "stick" with the Date value
System.out.println(mdyFormat.parse(mdy));
System.out.println(dmyFormat.parse(dmy));
} catch (ParseException exp) {
exp.printStackTrace();
}
どの出力...
Wed Aug 28 16:24:54 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 00:00:00 EST 2013
Wed Aug 28 00:00:00 EST 2013
フォーマットパターンにも注意してください。 SimpleDateFormat
をよく見て、間違ったパターンを使用していないことを確認してください。
SimpleDateFormat("MM-dd-yyyy");
の代わりに
SimpleDateFormat("mm-dd-yyyy");
MM points Month
、mm points minutes
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);
'M'(首都)は月を表し、 'm'(単純)は分を表します
数ヶ月間のいくつかの例
'M' -> 7 (without prefix 0 if it is single digit)
'M' -> 12
'MM' -> 07 (with prefix 0 if it is single digit)
'MM' -> 12
'MMM' -> Jul (display with 3 character)
'MMMM' -> December (display with full name)
議事録の例
'm' -> 3 (without prefix 0 if it is single digit)
'm' -> 19
'mm' -> 03 (with prefix 0 if it is single digit)
'mm' -> 19
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
フォーマットyyyy-mm-ddのJava.util.Dateがあります。
他にも述べたように、Date
クラスにはフォーマットがありません。 UTCで1970年の開始からミリ秒のカウントがあります。付帯条件なし。
他のAnswersは、現在Java.timeクラスに取って代わられた、厄介な古いレガシー日時クラスを使用しています。
Java.util.Date
がある場合は、Instant
オブジェクトに変換します。 Instant
クラスは、 UTC の分解能で ナノ秒 (最大9桁の10進数)でタイムライン上の瞬間を表します分数)。
Instant instant = myUtilDate.toInstant();
他の答えはタイムゾーンの重大な問題を無視します。日付を決定するにはタイムゾーンが必要です。与えられた瞬間の間、日付はゾーンによって世界中で変わります。パリの真夜中から数分後のフランスは新しい日ですが、それでもモントリオールケベックでは「昨日」です。
自分のInstant
のコンテキストに使用するタイムゾーンを定義します。
ZoneId z = ZoneId.of( "America/Montreal" );
ZoneId
を適用してZonedDateTime
を取得します。
ZonedDateTime zdt = instant.atZone( z );
LocalDate
時間なしで日付だけを気にする場合は、LocalDate
を抽出します。
LocalDate localDate = zdt.toLocalDate();
標準のISO 8601フォーマット、YYYY-MM-DDで文字列を生成するには、単にtoString
を呼び出します。 Java.timeクラスは、文字列を生成または解析するときにデフォルトで標準フォーマットを使用します。
String output = localDate.toString();
2017-01-23
MM-DD-YYYYフォーマットが必要な場合は、フォーマットパターンを定義します。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
フォーマットパターンコードでは大文字と小文字が区別されます。質問のコードは、mm
(月の月)ではなくMM
(時の分)を誤って使用していました。
解析には同じDateTimeFormatter
オブジェクトを使用してください。 Java.timeクラスはスレッドセーフなので、このオブジェクトを保持し、スレッド間でも繰り返して再利用できます。
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
、& SimpleDateFormat
のような、面倒な古い レガシー 日時クラスに代わるものです。
メンテナンスモード になった Joda-Time プロジェクトは、 Java.time クラスへの移行を推奨します。
詳しくは、 Oracle Tutorial を参照してください。そして多くの例と説明についてはStack Overflowを検索してください。指定は JSR 31 です。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。 Interval
、 YearWeek
、 YearQuarter
、 more などの便利なクラスがあります。
それはコードの下の単純な使用法です。
final Date todayDate = new Date();
System.out.println(todayDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate));
System.out.println(todayDate);
小さな "mm"月をそれが動作する大文字の "MM"に変更してください。以下は参考のためのサンプルコードです。
**Date myDate = new Date();
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);
Date dt = sm.parse(strDate);
System.out.println(strDate);**