web-dev-qa-db-ja.com

現在時刻をYYYY-MM-DDのHH:MI:Sec.Millisecondの形式で取得するにはどうすればいいですか?

下のコードは私に現在の時間を教えてくれます。しかし、それはミリ秒について何も伝えません。

public static String getCurrentTimeStamp() {
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
    Date now = new Date();
    String strDate = sdfDate.format(now);
    return strDate;
}

日付は2009-09-22 16:47:08 (YYYY-MM-DD HH:MI:秒) の形式で取得されます。

しかし、現在の時刻を2009-09-22 16:47:08.128((YYYY-MM-DD HH:MI:Sec.Ms)の形式で取得したいのですが、128はミリ秒を表します。

SimpleTextFormatはうまくいきます。ここで最小の時間単位は秒ですが、どうすればミリ秒も取得できますか?

553
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
861
JayJay

Javaワンライナー

public String getCurrentTimeStamp() {
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}

jDK 8スタイル

public String getCurrentLocalDateTimeStamp() {
    return LocalDateTime.now()
       .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}
182
Joram

あなたはあなたの日付フォーマット文字列にミリ秒フィールドを追加するだけでよいです:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

SimpleDateFormatのAPIドキュメント はフォーマット文字列を詳細に記述します。

98

これを試して:-

http://docs.Oracle.com/javase/6/docs/api/Java/text/SimpleDateFormat.html

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = new Date();
System.out.println(dateFormat.format(date));

または

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
40
duggu

tl; dr

Instant.now()
       .toString()

2016-05-06T23:24:25.694Z

ZonedDateTime.now( 
    ZoneId.of( "America/Montreal" ) 
).format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME )
 .replace( "T" , " " )

2016-05-06 19:24:25.694

Java.time

Java 8以降では、 Java.time フレームワークがJava 8以降に組み込まれています。これらの新しいクラスは、面倒な古いJava.util.Date/.Calendarクラスに代わるものです。新しいクラスは、成功した Joda-Time フレームワークにインスパイアされています。これは後継として作られたもので、概念は似ていますが再設計されています。 JSR 310 によって定義されています。 ThreeTen-Extra プロジェクトによって拡張されています。 Tutorial を参照してください。

Java.timeは nanosecond の分解能(小数点以下9桁の小数秒)に対して、Java.util.DateとJoda-Timeの両方の ミリ秒 の分解能(小数点以下3桁)に対応しています。そのため、小数点以下3桁しか表示しないようにフォーマットすると、データが隠れる可能性があります。

データからマイクロ秒またはナノ秒を削除したい場合は、切り捨ててください。

Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;

Java.timeクラスは、文字列を解析/生成するときに、デフォルトで ISO 8601 形式を使用します。末尾のZZuluの短縮形で、 UTC を意味します。

Instant は、最大 nanoseconds の分解能でUTCのタイムライン上の瞬間を表します。 Java 8の現在の時刻 のキャプチャは ミリ秒 に制限されています。Java9の新しい実装では、コンピュータのハードウェアクロックの能力に応じて最大でナノ秒をキャプチャします。

Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();

2016-05-06T23:24:25.694Z

ご希望の出力を得るために、中央のTをスペースで、Zを空白で置き換えてください。

String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.

2016-05-06 23:24:25.694

オフセットやタイムゾーンを含めても構わないので、特定の地域とは無関係の「ローカル」日時を指定します。

String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );

ジョダタイム

非常に成功したJoda-TimeライブラリはJava.timeフレームワークのためのインスピレーションでした。都合が良いときはJava.timeに移行することをお勧めします。

ISO 8601 フォーマットはミリ秒を含み、 Joda-Time 2.4ライブラリのデフォルトです。

System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );

実行すると…

Now: 2013-11-26T20:25:12.014Z

また、必要に応じて、ミリ秒単位の秒を数として求めることもできます。

int millisOfSecond = myDateTime.getMillisOfSecond ();
24
Basil Bourque

最も簡単な方法は(Java 8より前の)使用することでした。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

しかし SimpleDateFormat はスレッドセーフではありません。 Java.util.Date のどちらでもない。これは、ユーザーにとって潜在的な同時実行性の問題につながります。そしてそれらの既存の設計には多くの問題があります。 Java 8でこれらを克服するために、 Java.time という別のパッケージがあります。この Java SE 8の日付と時刻 ドキュメントはそれについての良い概観を持っています。

そのため、Java 8では、次のような方法で(現在の日付/時刻をフォーマットするために)うまくいきます。

LocalDateTime.now()
   .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

そして注目すべき1つのことは、それが人気のあるサードパーティのライブラリ joda-time の助けを借りて開発されたということです。

プロジェクトはJSR 310の下でJoda-Time(Stephen Colebourne)とOracleの作者によって共同で主導され、新しいJava SE 8パッケージJava.timeに登場します。

しかし今ではjoda-timeは非推奨になりつつあり、ユーザーに新しいJava.timeへの移行を求めています。

Java SE 8以降、ユーザーはJava.time(JSR-310)に移行するよう求められます。これは、このプロジェクトに代わるJDKの中核部分です。

とにかく、

Calendar インスタンスがある場合は、以下を使用してそれを新しいJava.timeに変換できます。

    Calendar calendar = Calendar.getInstance();
    long longValue = calendar.getTimeInMillis();         

    LocalDateTime date =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
    String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

    System.out.println(date.toString()); // 2018-03-06T15:56:53.634
    System.out.println(formattedString); // 2018-03-06 15:56:53.634

Dateオブジェクトがある場合

    Date date = new Date();
    long longValue2 = date.getTime();

    LocalDateTime dateTime =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
    String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

    System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
    System.out.println(formattedString);     // 2018-03-06 15:59:30.278

エポックのミリ秒だけがあったとします。

LocalDateTime date =
        LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
9
prime

私はこのようなものを使うでしょう:

String.format("%tF %<tT.%<tL", dateTime);

変数dateTimeは任意の日付または時刻、あるいはその両方の値にすることができます。 JavaDoc for Formatter を参照してください。

6
Usagi Miyamoto

上記の答えを補足するために、ミリ秒を含む現在の日時を表示するプログラムの小さな実用的な例を示します。

import Java.text.SimpleDateFormat;
import Java.util.Date;

public class test {
    public static void main(String argv[]){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date now = new Date();
        String strDate = sdf.format(now);
        System.out.println(strDate);
    }
}
4
ttb

あなたは単にあなたが望むフォーマットでそれを手に入れることができます。

String date = String.valueOf(Android.text.format.DateFormat.format("dd-MM-yyyy", new Java.util.Date()));
0
Hardik Lakhani

Java 8のドキュメントでは 秒の分数 と命名されていましたが、Java 6では ミリ秒 と命名されていました。これは私を混乱させました

0
ejaenv

これを使用して、 現在の時刻 を指定の形式で取得します。

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 System.out.print(dateFormat.format(System.currentTimeMillis()));  }
0

私はこれへの言及を見ません:

SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");

上記の形式も便利です。

http://www.Java2s.com/Tutorials/Java/Date/Date_Format/Format_date_in_yyyyMMddHHmmssSSS_format_in_Java.htm

0
Smart Coder