如何在Java中转换此日期?

时间:2010-09-25 01:00:23

标签: java datetime date date-format

我想转换:

2010-03-15T16:34:46Z

变成“5小时前”之类的东西

我怎样才能用Java做到这一点?

4 个答案:

答案 0 :(得分:1)

JodaTime支持从用户定义的格式进行解析。请参阅DateTimeFormatterBuilder和DateTimeBuilder.parseDateTime()。

拥有DateTime后,您可以从该时间和当前时间创建持续时间或期间,并使用另一个格式化程序进行漂亮打印。 [参见上面评论中BalusC引用的PeriodFormatter示例。]

答案 1 :(得分:0)

我知道Jquery中有一个插件:http://plugins.jquery.com/project/CuteTime

对于Java我假设你需要使用你的大脑:)(你可以将它翻译成Java)

答案 2 :(得分:0)

     Calendar calendar = new GregorianCalendar(2010,Calendar.March,15, 16,34,46);
     calendar.add(Calendar.HOUR,-5);

答案 3 :(得分:0)

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 d = Duration.between( instant , later ) ;

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

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

5小时前

ISO 8601持续时间

您可能会发现ISO 8601 compliant string for durations生成的Duration::toString有用:PnYnMnDTnHnMnS

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

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

  

PT5H

此类字符串可以解析为Duration小时。

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