我想转换:
2010-03-15T16:34:46Z
变成像“5小时前”这样的东西
我怎样才能在 Java 中做到这一点?
JodaTime支持从用户定义的格式进行解析。请参阅 DateTimeFormatterBuilder 和 DateTimeBuilder.parseDateTime()。
一旦有了 DateTime,您就可以从该时间和当前时间创建一个 Duration 或 Period,并使用另一个格式化程序进行漂亮打印。[参见上面评论中 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);
Duration.between(
Instant.parse( "2010-03-15T16:34:46Z" ) ,
Instant.now()
)
.toHours() // returns a `long` 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 ) ;
如果您想将整个经过的时间报告为一个很大的小时数,请致电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 的字符串Duration::toString
很有用:PnYnMnDTnHnMnS
P
标志着开始。将T
任何年-月-日与任何小时-分钟-秒分开。
所以我们上面五个小时的例子是:
PT5H
这样的字符串可以解析为Duration
小时。
Duration d = Duration.parse( "PT5H" ) ;