Android Get Current timestamp?


247

そのような現在のタイムスタンプを取得したい:1320917972

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();

2
FYI、といった面倒な古い日付時刻クラスjava.util.Datejava.util.CalendarTimestamp取って代わら今あるレガシー、java.timeのクラス。java.time機能のほとんどは、ThreeTen -BackportプロジェクトのJava 6およびJava 7にバックポートされています。ThreeTenABPプロジェクトの初期のAndroidにさらに適合。ThreeTenABPの使用方法…を参照してください。
バジルブルク2018年

回答:


298

解決策は次のとおりです。

Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();

これは、デバイスのタイムゾーンオフセットを考慮しません。
kjdion84

1
@ kjdion84すみませんが、なぜそれが重要だと思いますか?ちょうど質問に基づいています。
Cԃաԃ

82

開発者ブログから:

System.currentTimeMillis()エポックからのミリ秒を表す標準の「ウォール」クロック(時刻と日付)です。壁時計はユーザーまたは電話ネットワーク(setCurrentTimeMillis(long)を参照によって設定できるため、時刻が予期せずに前後にジャンプする可能性があります。この時計は、カレンダーや目覚まし時計のアプリケーションなど、実際の日時との対応が重要な場合にのみ使用してください。間隔または経過時間の測定では、別のクロックを使用する必要があります。を使用している場合System.currentTimeMillis()ACTION_TIME_TICKACTION_TIME_CHANGEDACTION_TIMEZONE_CHANGEDIntentのブロードキャストを聞いて、時間が変更されるタイミングを確認することを検討してください。


11
developer.android.com/reference/java/lang/…からです。 これSystem.nanoTime()はの代替System.currentTimeMillis()であり、予測できない変動がなく、期間の違いを測定するように設計されています。
Bianca Daniciuc 2013

2
@ ana01「ゼロ値は通常、デバイスが最後に起動したときはいつでも」-同じデバイスで継続時間の差を比較する場合にのみ使用できます。たとえば、データベースストレージには役立ちません。
のMichałK

1
@ ana01のコメントへのメモは、System.nanoTime()ウォールクロック時間の表示には適していません。そのためには、System.currentTimeMillis()代わりに使用してください。
Akash Agarwal

33

1320917972は、1970年1月1日の00:00:00 UTCからの秒数を使用するUnixタイムスタンプです。TimeUnit単位変換にクラスを使用できます-からSystem.currentTimeMillis()秒へ。

String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));

29

SimpleDateFormatクラスを使用できます。

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());

22
これは、タイムスタンプ(エポック時間)ではない
のMichałK

1
タイムスタンプではなく、しかも効率的​​ではありません(SimpleDateFormatの作成、日付の作成、変換)。それを避けなさい。
Seynorth 2014

あなたは他に答えていますが、それも有効です。
16

24

以下のメソッドを使用して、現在のタイムスタンプを取得します。それは私にとってはうまくいきます。

/**
 * 
 * @return yyyy-MM-dd HH:mm:ss formate date as string
 */
public static String getCurrentTimeStamp(){
    try {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentDateTime = dateFormat.format(new Date()); // Find todays date

        return currentDateTime;
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }
}

37
それはタイムスタンプではありません。

1
@Hits、それは単純な日付形式であり、タイムスタンプではありません。変数名をcurrentTimeStapとして使用しているだけです。
16

12

使い方は簡単です:

long millis = new Date().getTime();

あなたがそれを特定のフォーマットで望むなら、あなたは以下のようなフォーマッタが必要です

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString  = dateFormat.format(new Date());

8

これは、誰かが私と同じものを必要とする場合に備えて、ファイル名に使用できる人間が読めるタイムスタンプです。

package com.example.xyz;

import android.text.format.Time;

/**
 * Clock utility.
 */
public class Clock {

    /**
     * Get current time in human-readable form.
     * @return current time as a string.
     */
    public static String getNow() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d %T");
        return sTime;
    }
    /**
     * Get current time in human-readable form without spaces and special characters.
     * The returned value may be used to compose a file name.
     * @return current time as a string.
     */
    public static String getTimeStamp() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d_%H_%M_%S");
        return sTime;
    }

}

1
ねえ、タイムスタンプのリストをソートするための最良の方法を教えてもらえますか?自分で分類することを考えていましたが、もっと良い方法があるのではないかと思いました。
アッバスは2016年

これを読んでいる人のための今後の参考のために、「android.text.format.Time」は現在非推奨になっていることに注意してください
jason.kaisersmith

5

これらをお試しください

time.setText(String.valueOf(System.currentTimeMillis()));

およびtimeStampから時間の形式

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);

4

java.time

私は現代の答えに貢献したいと思います。

    String ts = String.valueOf(Instant.now().getEpochSecond());
    System.out.println(ts);

今実行中の出力:

1543320466

1000による除算は多くの人にとって驚くべきことではありませんが、独自の時間変換を行うと、非常に速く読み取ることが難しくなる可能性があるため、それを回避できる場合に慣れるのは悪い習慣です。

Instant私が使用していたクラスはjava.timeの一部、近代的なJavaの日付と時刻のAPIです。新しいAndroidバージョン、APIレベル26以降に組み込まれています。古いAndroid向けにプログラミングしている場合は、バックポートを取得できます。以下を参照してください。あなたがそれをしたくないのであれば、当然のことながら、組み込みの変換を使用します。

    String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
    System.out.println(ts);

これはsealskejの答えと同じです。出力は以前と同じです。

質問:Androidでjava.timeを使用できますか?

はい、java.timeは新旧のAndroidデバイスでうまく動作します。少なくともJava 6が必要です。

  • Java 8以降および新しいAndroidデバイス(APIレベル26以降)では、最新のAPIが組み込まれています。
  • Android以外のJava 6および7では、新しいクラスのバックポートであるThreeTenバックポートを取得します(JSR 310用のThreeTen。下部のリンクを参照)。
  • (古い)Androidでは、ThreeTen BackportのAndroidエディションを使用します。これはThreeTenABPと呼ばれます。またorg.threeten.bp、サブパッケージを使用して日付と時刻のクラスをインポートするようにしてください。

リンク集


ほぼ完璧な答え(私は賛成)ですが、少なくとも正直な意見では、ThreeTenバックポートの参照を削除する必要があります。これは、一般的なJavaではなく、Androidに関する質問であるためです。そして、それはAndroidの初心者にとって混乱するかもしれません。
SlobodanAntonijević19年

1
@SlobodanAntonijevićAndroidプログラマーは、(a)Android 26以降をサポートしている場合、組み込みのjava.timeの実装があること、(b)26より前の初期のAndroidをサポートしている場合、ライブラリを追加する必要があることを理解することが重要です、ThreeTenABPライブラリ、および(c)ThreeTenABPを使用している場合、このライブラリは実際にはJavaからAndroidに適応したThreeTen-Backportの適応であることを知っています。ThreeTenABPのライブラリは、単に周りのAndroid固有のラッパーですThreeTen-バックポートのライブラリ。3つのライブラリを比較するこの表のグラフィックを参照してください。
バジルブルク

@BasilBourqueあなたは完全に正しいです。ただし、実際にはThreeTen-BackportをインポートしてAndroidアプリで使用できますが、JAR依存関係のパフォーマンスの原因に非常に大きな影響を与えます。これが、Android開発者がThreeTen-Backportを使用してはならず、代わりにAPI 25以下のサポートにThreeTenABPを使用するべきであるという、より具体的な投稿であると私が言った理由です。私はさまざまなボード上で、Androidのどちらを使用すべきかについて混乱する多​​数の開発者を見てきました。
SlobodanAntonijević19年

良い点は、@SlobodanAntonijevićです。私はそれを少しだけ明確にしようとしました。
Ole VV、

1
@SlobodanAntonijević この表は、JavaとAndroidの両方でjava.timeを取得する場所を示しており、明確にするのに役立ちます。
バジルブルク

3

Kotlinのソリューション:

val nowInEpoch = Instant.now().epochSecond

最小SDKバージョンが26であることを確認してください。


0

私はヒッツの答えを使用することをお勧めしますが、ロケール形式を追加すると、これはAndroid開発者が推奨する方法です:

try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        return dateFormat.format(new Date()); // Find todays date
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }

0

このコードはKotlinバージョンです。分散エポック時間を与えるために最後の桁にランダムシャッフル整数を追加する別のアイデアがあります。

Kotlinバージョン

val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance

val deltaEpoch = oldEpoch - currentEpoch

私はそれがこのkodeを使用する方が良いと思いますそして次にアンドロイドバージョン26以上に依存します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.