我想转换:
2010-03-15T16:34:46Z
变成“5小时前”之类的东西
我怎样才能用Java做到这一点?
答案 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)
Duration.between(
Instant.parse( "2010-03-15T16:34:46Z" ) ,
Instant.now()
)
.toHoursPart() // returns a `int` integer number.
+ " hours ago"
5小时前
现代方法使用 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 compliant string for durations生成的Duration::toString
有用:PnYnMnDTnHnMnS
P
标志着开始。 T
将任何年 - 月 - 天与任何小时 - 分钟 - 秒分开。
所以我们上面的例子是五个小时:
PT5H
此类字符串可以解析为Duration
小时。
Duration d = Duration.parse( "PT5H" ) ;