2

我想转换:

2010-03-15T16:34:46Z

变成像“5小时前”这样的东西

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

4

4 回答 4

1

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

一旦有了 DateTime,您就可以从该时间和当前时间创建一个 Duration 或 Period,并使用另一个格式化程序进行漂亮打印。[参见上面评论中 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;博士

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

解析您的输入字符串。该字符串使用 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 ) ;

如果您想将整个经过的时间报告为一个很大的小时数,请致电Duration::toHours

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

5小时前

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

long daysPart = d.toDaysPart() ;
int hoursPart = d.toHoursPart() ;
int minutesPart = d.toMinutesPart() ;
String output = … ;  // Use the parts to generate your output.

ISO 8601 持续时间

您可能会发现生成的持续时间符合 ISO 8601 的字符串Duration::toString很有用:PnYnMnDTnHnMnS

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

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

PT5H

这样的字符串可以解析为Duration小时。

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