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

を使用してプロパティを追加する方法の詳細についてExpandoMetaClassは、Groovy のドキュメント ( http://www.groovy-lang.org/metaprogramming.html#metaprogramming_emc ) を参照してください。

于 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 に答える