2

変換したい:

2010-03-15T16:34:46Z

「5時間前」のようなものに

Javaでこれを行うにはどうすればよいですか?

4

4 に答える 4

1

JodaTimeは、ユーザー定義形式からの解析をサポートしています。DateTimeFormatterBuilderおよびDateTimeBuilder.parseDateTime()を参照してください。

DateTimeを取得したら、それと現在の時刻から期間または期間を作成し、別のフォーマッターを使用してきれいに印刷できます。[上記のコメントでBalusCによって参照されているPeriodFormatterの例を参照してください。]

于 2010-09-25T01:16:38.003 に答える
0

私はこれのためのJqueryのプラグインを知っています:http://plugins.jquery.com/project/CuteTime

Javaの場合、私はあなたがあなたの脳を使う必要があると思います:)(あなたはそれをJavaに翻訳することができます)

于 2010-09-25T01:10:02.710 に答える
0
     Calendar calendar = new GregorianCalendar(2010,Calendar.March,15, 16,34,46);
     calendar.add(Calendar.HOUR,-5);
于 2010-09-25T02:10:02.507 に答える
0

tl; dr

Duration.between(
    Instant.parse( "2010-03-15T16:34:46Z" ) , 
    Instant.now() 
)     
.toHours()    // returns a `long` integer number. 
+ " hours ago"

5時間前

java.time

最新のアプローチでは、厄介な古いレガシー日時クラスに取って代わる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の期間

によって生成された期間のISO8601準拠の文字列Duration::toStringが役立つ場合があります。PnYnMnDTnHnMnS

Pマークは始まりです。任意のT年-月-日を任意の時間-分-秒から分離します。

したがって、上記の5時間の例は次のようになります。

PT5H

このような文字列は、数時間に解析できますDuration

Duration d = Duration.parse( "PT5H" ) ;
于 2018-04-05T15:34:59.200 に答える