web-dev-qa-db-ja.com

カレンダー日付をJavaのyyyy-MM-dd形式に変換します。

カレンダーの日付を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フォーマットの日付オブジェクトが必要です。

181
1355

JavaのDateは、1970年1月1日の00:00:00 GMTから経過したミリ秒数のコンテナです。

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 Backport を利用するべきです

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

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

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"

これらは実際には同じ日付で、表現が異なります。

312
MadProgrammer

あなたのコードは間違っています。日付を解析するポイントはなく、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();
}
18

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形式を使用します。

13
Basil Bourque

Java.util.Dateオブジェクトは date custom 形式で表すことはできません代わりにstringを返すSimpleDateFormat.formatメソッドを使用します。

String myString=format1.format(date);
6
adatapost

Java.util.Dateオブジェクトを解析するためには、まず独自のフォーマットを使用してそれをStringに変換する必要があります。

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

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

2
ElderMael
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
Drew
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);
}
1
Petr

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

Simpledateformatを使用して文字列を日付に変換するとき、MySQLデータベースの日付フィールドと比較するのは難しいです。

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

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

0
JavaLearner
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;
    }
0
Unnati Solanki