如何在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" ) ;