Androidで現在の日時を取得する方法


1109

Androidアプリで現在の日時を取得するにはどうすればよいですか?


3
43答え!それらの多くは書かれたときに良かったが、2018年に使用するための良い答えはここにある
Ole VV 2018

回答:


1310

あなたは使うことができます:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Calendarには、必要なすべての定数がたくさんあります。

編集:カレンダークラスのドキュメントを
確認する


14
+1これは非常に役に立ちました。新しいので、私たちが必要とするこれらすべての小さなヒントです...私はユリウス日付を取得するためにカレンダーを使用しています。ミリ秒を取得して、値が今日と等しいかどうかを判断するよりもはるかに簡単です;)
Bill Mote

9
しかし、これはどこから日付と時刻を取得するのでしょうか?Androidデバイスの設定自体?
カイルクレッグ

12
@カイルはい、それはデバイスの時間設定/タイムゾーンに基づいています。ドキュメントからの引用:「カレンダーのgetInstanceメソッドは、ロケールがシステム設定に基づいており、時間フィールドが現在の日時で初期化されているカレンダーを返します」 -(クラスドキュメントの最初のサンプルコード行の上)。

3
+1このソリューションの精度はミリ秒で、私が必要とする精度です。
Igor Zelaya

42
@adamdportが言うように、これは実際には質問に答えません... Calendar.getInstance().getTime()またはCalendar.getInstance().getTimeInMillis()動作します。
akousmata

487

android.text.format.Timeを使用できます(ただし、もう必要ありません。以下を参照してください)。

Time now = new Time();
now.setToNow();

上にリンクされた参照から:

Timeクラスは、java.util.Calendarクラスとjava.util.GregorianCalendarクラスのより高速な置き換えです。Timeクラスのインスタンスは、秒の精度で指定された瞬間を表します。


注1: この回答を書いてから数年が経ちましたが、これは古いAndroid固有のクラスで、現在は非推奨となっています。Googleは今言う「[t]は彼のクラスには多くの問題があり、することが推奨されていることのGregorianCalendarが代わりに使用されています」。


注2:にもかかわらず、Timeクラスが持ちますtoMillis(ignoreDaylightSavings)メソッドを、これは単にミリ秒単位で時間を期待するメソッドに渡す便利です。時間の値は1秒までしか正確ではありません。ミリ秒の部分は常に000です。ループする場合

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

結果のシーケンスは1410543204000、次の1秒が始まるまで、同じ値を繰り返します。1410543205000繰り返しを開始します。


2
@InsanityOnABunおよびMuhammad Babar。ダメダメダメ。ドキュメントは「秒の精度で指定されていると言います。最も単純なテスト(ループ、toMillis、および結果のロギング/印刷で現在の時刻を取得する)でさえ、結果の時間はミリ秒の部分として000であることがわかります。
ToolmakerSteve 14

3
@IgorZelayaミリ秒の精度が必要な場合は、時刻ではなくインターバルタイミングを使用している可能性があります。AndroidドキュメントではSystemClock.uptimeMillis()、間隔のタイミングを推奨しています。これはほとんどの組み込み関数が使用するものであるため、すべてのデバイスで適切に実装される強い動機があります。SystemClockのディスカッションを参照してください...時刻と関連付ける場合は、アプリのonResumeで、これとTime / setToNow / toMillisの両方をお読みください。それらの違いを覚えておいてください。
ToolmakerSteve

Timeクラスは使用しないでください。将来的には削除される予定で、多くの問題があります。
Sandy Chapman、

1
>このクラスはAPIレベル22で廃止されました。代わりにGregorianCalendarを使用してください。こちらをご覧ください
Neo

実際にGregorianCalendarは、何年も前にJavaに、そして後にAndroidでjava.timeクラスに取って代わられましたZonedDateTime。以前のAndroidについては、ThreeTen-BackportおよびThreeTenABPプロジェクトを参照してください。
バジルブルク2018年

367

特定のパターンで日付と時刻を取得したい場合は、以下を使用できます。

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

または、

日付

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

時間:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

これはUTCでの時間を示し、タイムゾーンを採用する必要があります。
AndrasBalázsLajtha 2012

10
パフォーマンスが問題になる場合、SimpleDateFormatは問題になる可能性があることに注意してください。私のアプリには、特定の時間(ミリ秒を保持する長整数)を表す約20のHH:MMラベルと、同数の描画可能なリソースを持つカスタムビューがありました。最初のテストでは、やり取りが思ったほどスムーズではなかったことがわかりました。onDraw()のプロファイルを作成したところ、SimpleTimeFormatter呼び出しが80%の時間を費やしていることがわかりました。実際、私はこのページを読んで、より効率的なフォーマッタの検索の一部として、カレンダーなどについてさらに学習しています
ウィリアムT.マラード

3
はい、しかしもはやではありません。私はそれに伴うオーバーヘッドに気づかず、それがPOJOだと思っていました。
ウィリアムT.マラード2014年

32
つまり、String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani

4
sdf.setTimeZone(TimeZone.getDefault())真ん中に挿入できます
Harvey、

231

カスタマイズされたフォーマットを好むかもしれない人のために、あなたは使うことができます:

DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

一方、次のようなDateFormatパターンを使用できます。

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01

126

実際には、でデバイスに設定されている現在のタイムゾーンを設定する方が安全Time.getCurrentTimezone()です。そうしないと、現在の時刻がUTCで取得されます。

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

次に、たとえば次のように、必要なすべての日付フィールドを取得できます。

textViewDay.setText(today.monthDay + "");             // Day of the month (1-31)
textViewMonth.setText(today.month + "");              // Month (0-11)
textViewYear.setText(today.year + "");                // Year 
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

android.text.format.Timeを参照してくださいクラスをご覧ください。

更新

多くの人々が指摘しているように、グーグルはこのクラスには多くの問題があり、もう使用されるべきではないと言っています:

このクラスには多くの問題があるため、代わりにGregorianCalendarを使用することをお勧めします。

既知の問題点:

時間計算を実行する際の歴史的な理由により、すべての演算は現在32ビット整数を使用して行われます。これにより、1902年から2037年まで表現可能な信頼できる時間範囲が制限されます。詳細については、2038年問題に関するウィキペディアの記事を参照してください。この動作に依存しないでください。将来変更される可能性があります。DSTの移行によりスキップされたウォールタイムなど、存在できない日付でswitchTimezone(String)を呼び出すと、1969年の日付になります(つまり、-1、つまり1970年1月1日のUTCの1秒前の1秒)。書式設定/解析の多くはASCIIテキストを想定しているため、非ASCIIスクリプトでの使用には適していません。


時間はどのパッケージからインポートする必要がありますか?
ManishSB 2014年

このクラスはAPIレベル22で廃止されました。代わりにGregorianCalendarを使用できます。
Choletski

78

現在の日時については、以下を使用します。

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

どの出力:

Feb 27, 2012 5:41:23 PM

システムの現在の日付、曜日、および時刻を取得しましたが、時刻は変更されていません。秒単位で時間を増加させるために、どうすればよいですか。
Bhavesh Hirpara 2012年

2
これは、AndroidのAPIによると、それを行うための推奨される方法です:developer.android.com/reference/java/text/...ありがとう!
M Granja 2013

58

この方法で試してください日付と時刻の形式を取得するために、すべての形式が以下に示されています。

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

最初

二番目 第三


53

tl; dr

Instant.now()  // Current moment in UTC.

…または…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

詳細

他の回答は正しいですが、時代遅れです。古い日時クラスは設計が不十分で、混乱し、面倒であることが証明されています。

java.time

これらの古いクラスは、java.timeフレームワークに取って代わられました。

これらの新しいクラスは、JSR 310によって定義され、ThreeTen-Extraプロジェクトによって拡張された、非常に成功したJoda- Timeプロジェクトに触発されました。

Oracleチュートリアルを参照してください。

Instant

An Instantは、ナノ秒までの解像度を持つUTCのタイムライン上の瞬間です。

 Instant instant = Instant.now(); // Current moment in UTC.

タイムゾーン

タイムゾーン(ZoneId)を適用してを取得しZonedDateTimeます。時間帯を省略すると、JVMの現在のデフォルトの時間帯が暗黙的に適用されます。望ましい/期待されるタイムゾーンを明示的に指定することをお勧めします。

使用する適切なタイムゾーン名をの形式でcontinent/regionのようなAmerica/MontrealEurope/BrusselsまたはAsia/Kolkata。決してなど3-4文字の略語を使用していないESTか、IST彼らはどちらも標準化もなく、独特のとおりです。

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

モダンとレガシーの両方のJavaの日時タイプの表

文字列の生成

Stringは、日時値のテキスト表現として簡単に生成できます。標準形式、独自のカスタム形式、または自動的にローカライズされた形式を使用できます。

ISO 8601

toStringメソッドを呼び出して、一般的で実用的なISO 8601標準を使用してフォーマットされたテキストを取得できます。

String output = instant.toString();

2016-03-23T03:09:01.613Z

ZonedDateTime場合、toStringメソッドはISO 8601標準を拡張し、角かっこでタイムゾーンの名前を追加することに注意してください。非常に有用で重要な情報ですが、標準ではありません。

2016-03-22T20:09:01.613-08:00 [アメリカ/ロス_アンジェレス]

カスタムフォーマット

または、DateTimeFormatterクラスで独自の特定のフォーマットパターンを指定します。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Locale人間の言語(英語、フランス語など)を指定して、日/月の名前の翻訳や、年月日などの文化的基準の定義にも使用します。注Localeタイムゾーンとは何の関係もありません。

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

ローカライズ

さらに良いことに、java.timeにローカライズの作業を自動的に行わせます。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

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クラスはどこで入手できますか?

  • Java SE 8 Java SE 9 Java SE 10以降
    • ビルトイン。
    • 実装がバンドルされた標準Java APIの一部。
    • Java 9では、いくつかのマイナーな機能と修正が追加されています。
  • Java SE 6および Java SE 7
    • java.time機能の多くはThreeTen-BackportでJava 6&7にバックポートされています。
  • アンドロイド
    • Androidの新しいバージョンには、java.timeクラスの実装がバンドルされています。
    • 以前のAndroid(<26)の場合、ThreeTenABPプロジェクトはThreeTen-Backport(上記)を採用しています。ThreeTenABPの使用方法…を参照してください。

JavaとAndroidのどのバージョンで使用する* java.time *テクノロジーの実装をリストした表。


2
@ giraffe.guru私の答えをもう一度読んでください。3番目の弾丸を逃しました。java.time機能の多くは、ThreeTen -BackportでJava 6&7にバックポートされ、さらにThreeTenABPで Androidに適応されます
バジルブルク2016年

Instant.now()そしてZonedDateTime.now()必要になるAPI 26
ライド

2
@ライド私がgiraffe.guruに言ったように、私の答えをもう一度読んでください。「Android」に言及している3番目の箇条書きを探します。
バジルブルク2018

私はあなたが正しいと信じています。あなたの新しいjava.timeエディションテーブルは、箇条書きよりも直接的かつ簡単にメッセージを伝えます。それが私だったら、問題をもう少し複雑にして、ThreeTenBackport / Java 8+とThreeTenABP / Android 26+の下にあるかっこ(または類似のもの)にチェックマークを付けます。これらの組み合わせは機能するので、通常、それらを使用する意味はありません。ThreeTenABPを使用し、レベル26の上下の両方のAndroid APIレベルの範囲をターゲットとする開発中のAndroidアプリ。これらのケースでは、開発者が適切に選択しているようです。
Ole VV

1
@ OleV.V。グラフィック表に二次チェックマークを提案していただきありがとうございます。私はそれを後のバージョンの表で使用しています。かなり改善されました。
バジルブルク

52

System.currentTimeMillis()Javaの標準である現在の時刻を取得するために使用できます。次に、それを使用して日付を作成できます

Date currentDate = new Date(System.currentTimeMillis());

そして、時間を作成するために他の人が述べたように

Time currentTime = new Time();
currentTime.setToNow();

13
必要はありませんSystem.currentTimeMillis()。単にnew Date() 同じことをします。
Jonik 2013

Cannot resolve constructor Date()Androidの@Jonik では、Android SDKはJava 6と7の混合を使用します
surfer190

1
ありがとうございました。Date currentDate = new Date(System.currentTimeMillis());正解です
mghhgm 2016

@mghhgmいいえ、不正解ですnew Date(System.currentTimeMillis())。(a)とまったく同じであるため、冗長new Date()です。(b)問題のあるjava.util.Dateクラスはjava.time.Instant、Java 8以降で置き換えられています。ThreeTen-BackportプロジェクトのJava 6&7と、ThreeTenABPの以前のAndroid(<26)にバックポートしました
バジルブルク2018年

37

次のコードを使用できます。

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

出力:

2014-11-11 00:47:55

ここSimpleDateFormatから、さらにいくつかのフォーマットオプションを利用できます。


FYI、といった面倒な古い日付時刻クラスjava.util.Datejava.util.Calendarjava.text.SimpleDateFormat今のレガシーに取って代わられ、java.timeの後にJavaの8とに組み込まれたクラス。Oracleによるチュートリアル参照してください。
バジルブルク2018年

32

簡単です。次のように、時間を分析して現在の時間の個別の値を取得できます。

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

同じことが次のように日付にも当てはまります。

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);

次の5〜10日の日付を取得するにはどうすればよいですか。ここでは手動で計算していますか。
CoDe 2013

@CoDe日付を使用する
FindOutIslamNow

27

Androidは主にJavaであるため、いくつかのオプションがありますが、textViewで記述したい場合は、次のコードでうまくいきます。

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

8
Calendarまたはを使用してくださいGregorianCalendar。このDateクラスは非推奨です。
ジョセフ・アール

ありがとうメイト:)私はそれについてまったくまったく
知り

12
Date()リファレンスドキュメント(developer.android.com/reference/java/util/Date.html)によると、廃止予定のDate()クラスを参照するものは何もありません。ただし、いくつかのメソッドとコンストラクターは廃止予定です。
ザックセス

2
これにより、現在のユーザー設定の意味で誤った結果が生成されます(たとえば、12/24時間形式)。現在のユーザー設定のDateFormatを取得するには、android.text.format.DateFormat.getTimeFormat(Context context)を使用します。
wonder.mice 2011年

@Zac正解です。DateのgetTimeメソッドがさらに使い尽くされています

24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

日付形式パターン

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone

1
他の答えも正しいですが。この回答は、関連する時間に関連する問題にも役立つため、気に入りました。ありがとう@Vighnesh KM
Ankit Gupta

17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);

15

これは、日付と時刻を取得するのに役立つメソッドです。

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

このメソッドを呼び出して、現在の日付と時刻の値を取得できます。

2017/01//09 19:23

プレゼンテーションロジックとプロセスロジックの密結合が好きではありません。書式設定を行い、日付の入力パラメーターを取得する方法をお勧めします。また、2 SimpleDateFormat秒と2 Date秒を使用している理由もわかりません。"yyyy/MM/dd HH:mm"形式としてだけ使用して、カレンダーを一度呼び出すことはできませんか?
AjahnCharles 2017年

12
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

これにより、たとえば12:32が得られます。

android.text.format.Timeをインポートすることを忘れないでください。


12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);

12

現在の日付と時刻と形式については、

Javaで

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

コトリンで

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date","DATE : " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date","DATE : " + myDate)
}

日付フォーマッターパターン

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01

共同貢献していただきありがとうございます。以前の36の回答にはないものを提供していますか?いずれにせよ、悪名高い面倒で長く時代遅れのSimpleDateFormatクラスをまだ使用しています。Oreoを使用する必要がない場合でも、代わりに、java.timeのバックポートであるThreeTenABPを使用できます。これは、最新のJava日時APIです。
Ole VV

11

android.os.SystemClockを使用することもできます。たとえば、SystemClock.elapsedRealtime()は、電話がスリープ状態のときに、より正確な時間の読み取りを提供します。


10

現在の日付が必要な場合:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

現在の時刻が必要な場合:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));

9

カスタマイズされた時刻と日付の形式の場合:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

出力は次のような形式です:2015-06-18T10:15:56-05:00



8
Time now = new Time();
now.setToNow();

これも試してみてください。


8

次を使用して日付を取得できます。

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

これにより、次の例のように、適切な形式で結果が得られます: "2014/02/09"。


パラメーターなしのコンストラクターTime t = new Time();は、デフォルトのタイムゾーンを使用します。私の経験では、デフォルト==現在です。
ウィリアムT.マラード2014

7

まあ、APIによるいくつかの回答に問題があったので、このコードを融合しました。

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

出力:03:25 PM-2017/10/03


7

次のコードを使用するだけです。

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());

6

これを試して

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

これは完璧なワンライナーでエレガントなソリューションです。他の回答のように不必要に長い解決策ではなく、必要なのはそれだけです。
Zeeshan

5

以下のメソッドは、現在の日付と時刻を文字列で返します。実際のタイムゾーンに応じて異なるタイムゾーンを使用します。私はGMTを使用しました

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}

4

新しいAPIに従ってCalenderクラスを使用する必要があります。Dateクラスは非推奨になりました。

Calendar cal = Calendar.getInstance();

String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);

String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);

4

以下のコードを使用してみてください:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.