3

在 Groovy 中,有一些快捷方式可用于查找 Date 对象的各种公共变量,如下所示。

Date now = new Date()
Integer year = now.year + 1900
Integer month = now.month + 1
Integer day = now.date
Integer hour = now.hours
Integer minute = now.minutes

获取年份的捷径是什么?

4

2 回答 2

4

这个问题的简短答案是“没有捷径”,但长答案添加了“......但你可以做一个!”

无需任何修改,您可以使用以下代码从日期对象访问一年中的某一天:

Date now = new Date()
Integer dayOfYear = now[Calendar.DAY_OF_YEAR]

但是,如果您的代码将频繁访问该变量,您可以修改Date类以直接使用ExpandoMetaClass以下方法添加该属性:

Date.metaClass.getDayOfYear << { -> delegate[Calendar.DAY_OF_YEAR]}
Date now = new Date()
assert now[Calendar.DAY_OF_YEAR] == now.dayOfYear

有关如何添加属性的更多信息,请参见 http://www.groovy-lang.org/metaprogramming.html#metaprogramming_emcExpandoMetaClass的 Groovy 文档

于 2012-11-12T19:58:16.023 回答
2

这个答案暂时不相关,但 Java 8 设置为包含 JSR-310,这是一个更好的日期和时间实现/表示。

您可以在 java 8 功能列表中看到该功能

在 Java 8 中,您将拥有表示日期的新对象。最相似的一个日期是LocalDateTime

以下是如何在 Java 中完成此操作的示例(当然,Groovy 更容易):

LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
// your answer
int dayOfYear = now.getDayOfYear();

这应该可以从 Java 8 的里程碑6开始摆弄和玩耍。里程碑 6 设置为 2013 年 1 月 31 日

于 2012-11-12T21:26:56.420 回答