相当于Java的Momentjs calendar()

2019年6月6日 14点热度 0条评论

Momentjs具有calendar()函数,可以实现如下所示的打印时间跨度。
例如:

“上周一的1:14 PM”
“09/21/2017”(如果日期是前一阵子)

Java中是否有等效的功能(如果可能,可以使用Joda-Time)?

moment().subtract(10, 'days').calendar(); // 09/21/2017
moment().subtract(6, 'days').calendar();  // Last Monday at 1:14 PM
moment().subtract(3, 'days').calendar();  // Last Thursday at 1:14 PM
moment().subtract(1, 'days').calendar();  // Yesterday at 1:14 PM
moment().calendar();                      // Today at 1:14 PM
moment().add(1, 'days').calendar();       // Tomorrow at 1:14 PM
moment().add(3, 'days').calendar();       // Wednesday at 1:14 PM
moment().add(10, 'days').calendar();      // 10/11/2017

解决方案如下:

java.time

现代方法使用行业领先的java.time类。

ZoneId z = ZoneId.now( “America/Montreal”  ) ;
LocalDate today = LocalDate.now( z ) ;

使用加号和减号方法进行数学运算。

LocalDate tomorrow = today.plusDays( 1 ) ;

搜索堆栈溢出。几乎每个基本的日期时间问题都已经被要求回答。

弦乐

java.time类不会生成诸如“明天”和“上周一”之类的字符串。因此,没有直接等同于您引用的库的信息。您将不得不自己做农民工作。

搜索
DateTimeFormatter 类和
DateTimeFormatterBuilder 类。

同样,
DayOfWeek 枚举及其自动本地化
getDisplayName 方法可能会很有用。

漂亮时间

尽管我没有使用
prettytime库,但它可能会对您有所帮助。

乔达时代

Joda-Time项目处于维护模式。该团队建议迁移到java.time类。

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧
legacy日期时间类,例如
java.util.Date
Calendar
SimpleDateFormat

现在位于
Joda-Time中的
maintenance mode项目建议迁移到
java.time类。

要了解更多信息,请参见
Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为
JSR 310

在哪里获取java.time类?

  • Java SE 8Java SE 9和更高版本
  • 内置。
  • 是标准Java API的一部分,具有捆绑的实现。
  • Java 9添加了一些次要功能和修复。
  • Java SE 6Java SE 7
  • 许多java.time功能都在ThreeTen-Backport中反向移植到Java 6和7。
  • Android
  • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(如上所述)。
  • 请参阅How to use ThreeTenABP…

  • ThreeTen-Extra项目使用其他类扩展了java.time。该项目是将来可能向java.time添加内容的试验场。您可能会在这里找到一些有用的类,例如
    Interval
    YearWeek
    YearQuarter
    more