tl; dr
現在の時間の1秒の端数をミリ秒数で要求します(エポックから数えません)。
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03:01:14.113Z→ 113
- ナノ秒(10億)単位の小数秒を取得します。
- 1000で割り、ミリ秒(千)に切り捨てます。
IdeOne.comでこのコードがライブで実行されるのを確認してください。
java.timeの使用
最新の方法は、java.timeクラスを使用する方法です。
UTCで現在の瞬間をキャプチャします。
Instant.now()
Instant.get
メソッドを使用して、の値を問い合わせますTemporalField
。私たちの場合、TemporalField
必要なのはChronoField.MILLI_OF_SECOND
です。
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
またはあなた自身で数学をしてください。
特定のタイムゾーンでこれを要求している可能性が高くなります。秒の端数はと同じである可能性が高いですが、Instant
タイムゾーンに非常に多くの異常があるため、私はその仮定をためらいます。
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
小数秒を問い合わせます。質問はミリ秒を要求しましたが、java.timeクラスはナノ秒のより細かい分解能を使用します。つまり、ナノ秒数の範囲は0〜999,999,999です。
long nanosFractionOfSecond = zdt.getNano();
本当にミリ秒が必要な場合は、100万で割ってより細かいデータを切り捨てます。たとえば、0.5秒は500,000,000ナノ秒であり、500ミリ秒でもあります。
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
java.timeについて
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。
[0, 999]
にありますよね?@thinksteepが最後の文を読んでください。