Java 在groovy中如何从日期中提取一年中的某一天

Java 在groovy中如何从日期中提取一年中的某一天,java,groovy,Java,Groovy,在Groovy中,有一些快捷方式可用于查找日期对象的各种公共变量,如下面列出的那些 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 获得一年中的某一天的捷径是什么?这个问题的简短答案是“没有捷径”,但长答案补充道“……但你可以

在Groovy中,有一些快捷方式可用于查找日期对象的各种公共变量,如下面列出的那些

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

获得一年中的某一天的捷径是什么?

这个问题的简短答案是“没有捷径”,但长答案补充道“……但你可以走捷径!”

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

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
Date.metaClass.getDayOfYear委托[Calendar.DAY OfYear]}
现在日期=新日期()
现在断言[Calendar.DAY\u OF年]==now.dayOfYear

有关如何使用ExpandoMetaClass添加属性的更多信息,请参见Groovy文档中的

。这个答案目前不适用,但Java 8将包含JSR-310,这是一个更好的日期和时间实现/表示方法

您可以在Java8特性中看到该特性

在Java8中,您将拥有表示日期的新对象。最相似的日期是

下面是一个如何在Java中实现这一点的示例(当然Groovy更容易实现):

从Java8开始,这应该可以用来摆弄和玩。
里程碑6设置为2013年1月31日

您也可以使用calendar.instance:
calendar.instance[日历.日期/年份]
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();