2013-10-11 14 views
6

JodaTimeでは、「プラス」または「マイナス」機能を使用せずにコードの最小行を使用しないで、時間を変更せずに新しい日付を設定するにはどうすればよいですか?その後、必要な日付で新しいDateTimeを作成し、再び時間、分、秒を設定 -時刻を変更しないで日付を修正

私の最初の試みはgetHoursOfDay()getMinutesOfHour()などを使用して別のint秒でDateTimeの「時間」の部分を保存することでした。しかし、この方法は非常に厄介であり、これを行うためのより冗長な方法があれば理想的です。ちょうど1行のコードで理想的です。例えば

22/05/2013 13:40:02 >>>>30/08/2014 13:40:02

+0

私は主としての意見をベースと閉じるように投票してきました。問題を解決するための「最も簡単な」ルートは主観的です。代わりにあなたが「*私は日/月/年を変える方法を知らないのですか?*」と意味していたならば、それを明確にするために質問を編集してください。その場合は、最善の努力も含めてください。 –

+2

「最も簡単」が「シンプル」に変更されました。これははるかに主観的ではありません –

+0

明確にするために、私はすでにこれを行う方法のいくつかを知っていますが、冗長で厄介です。私は、誰かが実際にストリームラインのアプローチを利用できるかどうかを見ています。 –

答えて

1

以前に受け入れられた回答は、司会者によって削除されました。javadocへのリンクのみが含まれているためです。 ここは編集されたバージョンです。


のJavaDocはここにある

DateTime myDate = ... 
myDate.withDate(desiredYear, desiredMonth, desiredDayOfMonth); 

このようにあなたはそれを行うことができます: DateTime.withDate(int year, int month, int dayOfMonth)

2

がJodaTime必須ですか?これを行うための基本的な方法は、 です。1.タイムスタンプからちょうど時間を抽出します。 2.ちょうどこのよう


long timestamp = System.currentTimeMillis(); //OK we have some timestamp 
long justTime = timestamp % 1000 * 60 * 60 * 24;// just tiem contains just time part 


long newTimestamp = getDateFromSomeSource();//now we have date from some source 
justNewDate = newTimestamp - (newTimestamp % 1000 * 60 * 60 * 24);//extract just date 

result = justNewDate + justTime; 

何かをこれまでにこれを追加します。このような

+0

これまでの私のこれまでの試みは、あなたの提案と同じくらい冗長でしたが、完全に予期しない方法で問題を解決しました。そのために+1です。 –

+0

これは夏時間を考慮しません。 – SpaceTrucker

1

使用withFields

new DateTime().withFields(new LocalDate(2000,1,1)) 

これはLocalDateに含まれているものにDateTimeのすべての日付時刻フィールドを設定します - この場合は年、月、日。これは、たとえばのようなReadablePartialの実装では機能します。

関連する問題