Javaでのカレンダー日付をyyyy-MM-dd形式に


210

カレンダーの日付をyyyy-MM-ddフォーマットに変換する方法。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

これは生成されinActiveDate = Wed Sep 26 00:00:00 IST 2012ます。しかし、私が必要なのは2012-09-26です。私の目的は、Hibernate基準を使用して、この日付をデータベース内の別の日付と比較することです。だから私はyyyy-MM-ddフォーマットの日付オブジェクトが必要です。


5
あなたはコードが混乱しています。toをフォーマットDateyyyy-MM-ddたり、Stringから値yyyy-MM-ddを解析したりしていDateますか?日付をフォーマットするには、を使用しformat1.format(date)、それを解析するには、format1.parse(someStringValueInTheCorrectFormat)
MadProgrammer

私は自分の質問を編集しました..前の間違いでごめんなさい..
Sarika.S '25

9
1つのライナー:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
Iwan Aucamp 2014年

回答:


342

Java Dateは、1970年1月1日、グリニッジ標準時00:00:00からのミリ秒数のコンテナーです。

のようなものを使用するとSystem.out.println(date)、JavaはDate.toString()内容を印刷するために使用します。

これを変更する唯一の方法は、オーバーライドDateして独自のの実装を提供することですDate.toString()。IDEを起動してこれを試す前に、私はしません。問題を複雑にするだけです。日付を使用(または表示)したい形式にフォーマットすることをお勧めします。

Java 8以降

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Java 8より前

ThreeTenバックポートを利用する必要があります

以下は、歴史的な目的のために維持されます(元の回答として)

あなたができることは、日付をフォーマットすることです。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

これらは実際には同じ日付であり、異なる方法で表されます。


1
Calendar
ちょっと

1
とにかく、このカレンダーオブジェクトからタイムゾーンを完全に削除しますか?
Sarika.S 2012

2
日付/時刻の操作については本当に深刻であれば、見とるジョダ時間を、それはいじり、その後かなり簡単だ、Calendar
MadProgrammer

2
@ n13質問がデータベースの日付操作または時間操作でさえあれば、私はあなたに同意するかもしれません。問題は、特定の日付形式で日付値を表す方法でした
MadProgrammer

1
うまく構造化された答え-これは基本的にModel(Date)-View(Format)の分離です。
ヨーヨー、2016

19

あなたのコードは間違っています。日付を解析するポイントはなく、それをDateオブジェクトとして保持します。

カレンダーの日付オブジェクトを文字列として表示して保持したい場合は、フォーマットすることができます。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

13

java.time

MadProgrammer答え、特にJoda -Timeに関するヒントは正しいですJoda -Timeの後継は、新しいjava.timeパッケージとしてJava 8に組み込まれています。Java 8のサンプルコードは次のとおりです。

(ローカル日付ではなく)日時を処理する場合、タイムゾーンは重要です。月の日はタイムゾーンによって異なります。たとえば、インドのタイムゾーン+05:30(UTCより5時間半進んでいます)、フランスは1時間しか進んでいません。そのため、インドの新しい日の瞬間には1つの日付があり、フランスの同じ瞬間には「昨日の」日付があります。タイムゾーンやオフセット情報のない文字列出力を作成すると、あいまいさが生じます。YYYY-MM-DDの出力を求めたので提供しましたが、お勧めしません。この出力を取得するためにISO_LOCAL_DATE使用ISO_DATEする代わりに:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

コンソールにダンプ…

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

実行すると…

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

ジョーダタイム

java.timeの前身であるJoda -Timeライブラリを使用した同様のコード。

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

ちなみに、入力文字列のその形式は標準形式であり、ISO 8601で定義されているいくつかの便利な日時文字列形式の1つです。

Joda-Timeとjava.timeはどちらも、さまざまな日時値の文字列表現を解析および生成するときに、デフォルトでISO 8601形式を使用します。


6

java.util.Dateオブジェクトはカスタム形式で日付を表すことができないため、を返すメソッドを使用する必要があります。SimpleDateFormat.formatstring

String myString=format1.format(date);

2

java.util.Dateオブジェクトを解析するには、まず独自の形式を使用してオブジェクトを文字列に変換する必要があります。

inActiveDate = format1.parse(  format1.format(date)  );

しかし、私はあなたがここで冗長であると信じています。


2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

これにより、JOptionウィンドウペインに日付+ 7日が月、日、年の形式で表示されます。


2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}

2
SOへようこそ。コードのみの回答はGoogleの基準を満たしていないため、コンテキスト/説明を追加してください。stackoverflow.com/help/how-to-answerを
Uwe Allner '26 / 09/26

0

日付がデータベースの日付フィールドと比較する形式で比較されているこのコードを見つけました...これはあなたに役立つかもしれません...

simpledateformatを使用して文字列を日付に変換すると、mysqlデータベースの日付フィールドと比較するのが難しくなります。

したがって、select STR_to_DATE( 'yourdate'、 '%m /%d /%Y')->この形式でjava文字列の日付を形式に変換すると、mysql日付フィールドの正確な日付形式が得られます。

http://javainfinite.com/java/java-convert-string-to-date-and-compare/


3
リンクの腐敗やその他の問題のため、StackOverflowではリンクのみの回答は推奨されません。要点をまとめた情報を教えてください。
バジルブルク2015

0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.