如何在Java中转换此日期?

我要转换:

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); 

TL;博士

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

5小时前

java.time

现代方法使用java.time类来取代麻烦的旧遗留日期时间类。

Instant

解析输入字符串。 该字符串使用ISO 8601标准中定义的格式。 在解析/生成字符串时,java.time类在默认情况下使用这些标准格式。 因此无需指定格式化模式。

 Instant instant = Instant.parse( "2010-03-15T16:34:46Z" ) ; 

得到我们的晚些时刻。

 Instant later = instant.now() ; // Capture the current moment in UTC. 

让我们用五个小时后的时刻。

 Instant later = instant.plus( 5L , ChronoUnit.HOURS ) ; 

Duration

使用Duration类表示小时 – 分钟 – 秒的已用Duration

 Duration d = Duration.between( instant , later ) ; 

在Java 9及更高版本中,调用to…Part以获取天,小时,分钟,秒,纳秒的每个部分。 这些方法在Java 8中奇怪地缺失,但在Java 9及更高版本中添加。

 String output = d.toHoursPart() + " hours ago" ; 

5小时前

ISO 8601持续时间

您可以找到符合ISO 8601的字符串,持续时间由Duration::toString生成: PnYnMnDTnHnMnS

P标志着开始。 T将任何年 – 月 – 天与任何小时 – 分钟 – 秒分开。

所以我们上面的例子是五个小时:

PT5H

这些字符串可以解析为Duration时间。

 Duration d = Duration.parse( "PT5H" ) ;