tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
日付時刻の作業には、優れたjava.timeクラスを使用してください。これらのクラスは、java.util.Date
およびなどの厄介な古い日時クラスに取って代わりjava.util.Calendar
ます。
ISO 8601
java.timeクラスは、日時値の文字列の解析/生成にデフォルトで標準ISO 8601形式を使用します。入力文字列を準拠させるには、中央のスペースをに置き換えますT
。
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
入力文字列をLocalDateTime
タイムゾーンまたはUTCからのオフセットに関する情報がないため、入力文字列をとして解析します。
LocalDateTime ldt = LocalDateTime.parse( inputModified );
10分追加します。
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString():2016-01-23T12:34
ldtLater.toString():2016-01-23T12:44
IdeOne.comのライブコードを参照してください。
これにLocalDateTime
はタイムゾーンがないため、タイムライン上のポイントを表していません。タイムゾーンを適用して、実際の瞬間に翻訳します。指定適切なタイムゾーン名をの形式でcontinent/region
のような、America/Montreal
、Africa/Casablanca
、またはPacific/Auckland
、またはAsia/Karachi
。など3-4文字の略語は絶対に使用しないでくださいEST
か、IST
またはPKT
そのままではない真の時間帯、標準化されていない、と(!)にも固有のものではありませんが。
ZonedDateTime
この値の予定タイムゾーンがわかっている場合は、を適用してZoneId
を取得しZonedDateTime
ます。
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString():2016-01-23T12:44 + 05:00 [アジア/カラチ]
異常
タイムゾーンを追加する10分前か後に追加するかどうかを検討してください。あなたはので、シフトなど夏時間(DST)などの異常の非常に異なる結果を得ることができ、壁時計時間を。
ゾーンを追加する前または後に10分を追加する必要があるかどうかは、ビジネスシナリオとルールの意味によって異なります。
ヒント:タイムライン上の特定の瞬間を意図する場合は、常にタイムゾーン情報を保持してください。入力データで行ったように、その情報を失わないでください。値12:34
はパキスタンの正午、フランスの正午、またはケベックの正午であることを意味していますか?パキスタンで正午を意味する場合は、少なくともUTCからのオフセット(+05:00
)を含めて、さらにタイムゾーンの名前()を含めることでそのようにしAsia/Karachi
ます。
Instant
UTCのレンズを通して見たのと同じ瞬間が必要な場合は、を抽出しInstant
ます。このInstant
クラスは、ナノ秒の分解能(小数点以下9桁まで)でUTCのタイムライン上の瞬間を表します。
Instant instant = zdt.toInstant();
変換する
厄介な古い日時クラスは可能な限り避けてください。ただし、必要な場合は変換できます。古いクラスに追加された新しいメソッドを呼び出します。
java.util.Date utilDate = java.util.Date.from( instant );
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
、および多くを。