下のコードは私に現在の時間を教えてくれます。しかし、それはミリ秒について何も伝えません。
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
はうまくいきます。ここで最小の時間単位は秒ですが、どうすればミリ秒も取得できますか?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
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"));
}
あなたはあなたの日付フォーマット文字列にミリ秒フィールドを追加するだけでよいです:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
SimpleDateFormatのAPIドキュメント はフォーマット文字列を詳細に記述します。
これを試して:-
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()));
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 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 形式を使用します。末尾のZ
はZulu
の短縮形で、 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 ();
最も簡単な方法は(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());
私はこのようなものを使うでしょう:
String.format("%tF %<tT.%<tL", dateTime);
変数dateTime
は任意の日付または時刻、あるいはその両方の値にすることができます。 JavaDoc for Formatter
を参照してください。
上記の答えを補足するために、ミリ秒を含む現在の日時を表示するプログラムの小さな実用的な例を示します。
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);
}
}
あなたは単にあなたが望むフォーマットでそれを手に入れることができます。
String date = String.valueOf(Android.text.format.DateFormat.format("dd-MM-yyyy", new Java.util.Date()));
これを使用して、 現在の時刻 を指定の形式で取得します。
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.print(dateFormat.format(System.currentTimeMillis())); }
私はこれへの言及を見ません:
SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");
上記の形式も便利です。