Javaで現在の日付を文字列に変換する方法は?


回答:


215
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

タイムストリングには、これと真下の答えの組み合わせを使用しました。C:
php_coder_3809625 2016

@Ian Purton文字列日付はUTC tz ..?
Kanagavelu Sugumar 2017年

参考までに、これらの厄介なクラスはレガシーになり、java.timeクラスに取って代わられました。Oracleチュートリアルを参照してください。
バジルブルク2017

62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

ここから撮影


日付の代わりにカレンダーを使用するための最良の応答。
ランダム

5
よくわかりません。どの宇宙でCalendarより望ましいですDateか?
jasonmp85

1
参考までに、これらの厄介なクラスはレガシーになり、java.timeクラスに取って代わられました。Oracleチュートリアルを参照してください。
バジルブルク2017

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
達成しすぎて申し訳ありません。
jasonmp85

2
そのメソッドで使用される形式はひどいです。また、KVMの現在のデフォルトのタイムゾーンが暗黙的に適用されるため、結果は異なります。そして、これらの厄介なクラスは今やレガシーであり、java.timeクラスに取って代わられました。Oracleチュートリアルを参照してください。
バジルブルク2017


14

tl; dr

LocalDate.now()
         .toString() 

2017-01-23

望ましい/期待されるタイムゾーンを明示的に指定する方が良い。

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

Java 8以降の最新の方法は、java.timeフレームワークを使用する方法です。

日付はいつでも世界中で変化するため、タイムゾーンを指定します。

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017-01-23

デフォルトでは、標準のISO 8601形式の文字列を取得します。

他の形式の場合はjava.time.format.DateTimeFormatterクラスを使用します。


java.timeについて

java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.DateCalendar&を、SimpleDateFormat

ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。

詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。

java.timeオブジェクトをデータベースと直接交換することができます。JDBC 4.2以降に準拠したJDBCドライバーを使用します。文字列もクラスも必要ありません。java.sql.*

java.timeクラスはどこで入手できますか?

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを



1

YYYY-MM-ddとしての時間

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

また、DateTimeのライブラリは次のとおりです。

import org.joda.time.DateTime;


そして、どの図書館のDateTime出身ですか?このサイトはスニペットライブラリ以上のものであるため、Stack Overflowの回答にはいくつかの説明が必要です。
バジルブルク2017

0

回答のほとんどは有効です。日付処理のための新しいJAVA APIの変更により、Java日付処理における以前のあいまいさが確実に軽減されました。

同様の呼び出しに対して非推奨のメッセージが表示されます。

new Date() // deprecated

上記の呼び出しでは、開発者は新しいDateオブジェクトが現在のタイムスタンプを持つDateオブジェクトを提供すると想定する必要がありました。この動作は、他のJava APIクラス間で一貫していません。

これを行う新しい方法は、カレンダーインスタンスを使用することです。

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

ここでも命名規則は完全ではありませんが、これはかなり整理されています。私のような、物事を強打するのに苦労しているが、それが論理的に聞こえたり/現れたとしても、何かを決して忘れない人にとって、これは良いアプローチです。

これは実際の生活と同義です

  1. Calendarオブジェクトを取得し、その中の時間を探します。(カレンダーから体が時間を取得しないので不思議に思うかもしれません、それが完璧ではないと私が言った理由ですが、それはまったく別のトピックです)
  2. 次に、シンプルなテキスト形式の日付が必要なので、手順1の日付のフォーマットに役立つSimpleDateFormatユーティリティクラスを使用します。この形式のパラメーターとしてyyyy、MM、ddを使用しました。サポートされる日付形式パラメーター

これを行うもう1つの方法は、Joda time APIを使用することです

new DateTime().toString("yyyy-MM-dd")

またははるかに明白な

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

どちらも同じ結果を返します。


FYI、といった面倒な古い日付時刻クラスjava.util.Datejava.util.Calendarjava.text.SimpleTextFormat今のレガシーに取って代わられ、java.timeのクラス。また、Joda -Timeプロジェクトがメンテナンスモードになり、チームはjava.timeへの移行をアドバイスしています。
バジルブルク

1
@BasilBourqueそれは私の回答で私が意味したことであり、上位投票された回答は正しいですが、今日の開発者には関係ありません。最後に、JavaにはClockクラスがあり、Clock.getTime()は、Dateクラス、DateTimeクラス、またはTimeクラスよりもはるかに賢明で現実的なものに似ています。Java開発者は、OOPSが実際のシナリオを模倣するものとして始まったことを知る必要があります。
Swapnil Vargaonkar

参考までに、ClockJava 8 の実装はレガシークラスとまったく同じです。Java 9でのみ、ナノ秒単位の精度で現在の瞬間をキャプチャできる新しい実装が到着します。
バジルブルク2017

はい、私が「ついに」Javaを書いた理由は、実際のシナリオ(OOPSの概念)を模倣し、現在の瞬間を表示/キャプチャ(好みの言い方)するClockクラスを備えているためです。
Swapnil Vargaonkar 2017

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }

1
このコードについてのいくつかの説明は、おそらく有益でしょう。
パイブ2017年

1
答えは質問には関係ありません。そして、いいえ、どのようなString形式の日付も関数に渡すことはできません。
ジェリンジョセフ2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.