変換したい:
2010-03-15T16:34:46Z
「5時間前」のようなものに
Javaでこれを行うにはどうすればよいですか?
JodaTimeは、ユーザー定義形式からの解析をサポートしています。DateTimeFormatterBuilderおよびDateTimeBuilder.parseDateTime()を参照してください。
DateTimeを取得したら、それと現在の時刻から期間または期間を作成し、別のフォーマッターを使用してきれいに印刷できます。[上記のコメントでBalusCによって参照されているPeriodFormatterの例を参照してください。]
私はこれのためのJqueryのプラグインを知っています:http://plugins.jquery.com/project/CuteTime
Javaの場合、私はあなたがあなたの脳を使う必要があると思います:)(あなたはそれをJavaに翻訳することができます)
Calendar calendar = new GregorianCalendar(2010,Calendar.March,15, 16,34,46);
calendar.add(Calendar.HOUR,-5);
Duration.between(
Instant.parse( "2010-03-15T16:34:46Z" ) ,
Instant.now()
)
.toHours() // returns a `long` integer number.
+ " hours ago"
5時間前
最新のアプローチでは、厄介な古いレガシー日時クラスに取って代わるjava.timeクラスを使用しています。
Instant
入力文字列を解析します。その文字列は、ISO8601標準で定義された形式を使用します。java.timeクラスは、文字列を解析/生成するときに、デフォルトでこれらの標準形式を使用します。したがって、フォーマットパターンを指定する必要はありません。
Instant instant = Instant.parse( "2010-03-15T16:34:46Z" ) ;
後で時間を取ってください。
Instant later = instant.now() ; // Capture the current moment in UTC.
5時間後の瞬間を使ってみましょう。
Instant later = instant.plus( 5L , ChronoUnit.HOURS ) ;
Duration
クラスで時間-分-秒の経過時間を表しDuration
ます。
Duration d = Duration.between( instant , later ) ;
経過時間全体を1つの大きな時間数として報告する場合は、に電話してDuration::toHours
ください。
String output = d.toHoursPart() + " hours ago" ;
5時間前
Java 9以降では、呼び出しto…Part
て、日、時間、分、秒、ナノ秒の各部分を取得します。これらのメソッドは、Java 8では奇妙なことに欠落していましたが、Java9以降で追加されました。
long daysPart = d.toDaysPart() ;
int hoursPart = d.toHoursPart() ;
int minutesPart = d.toMinutesPart() ;
String output = … ; // Use the parts to generate your output.
によって生成された期間のISO8601準拠の文字列Duration::toString
が役立つ場合があります。PnYnMnDTnHnMnS
P
マークは始まりです。任意のT
年-月-日を任意の時間-分-秒から分離します。
したがって、上記の5時間の例は次のようになります。
PT5H
このような文字列は、数時間に解析できますDuration
。
Duration d = Duration.parse( "PT5H" ) ;