2010-01-05 29 views
2

使用Groovy(或Java)如何將org.joda.time.LocalDateTime轉換爲java.util.Date?使用localDateTime.toDateTime().toDate()使用Groovy(或Java)如何將org.joda.time.LocalDateTime轉換爲java.util.date?

import org.joda.time.* 

Calendar cal = Calendar.instance 
    cal.set(Calendar.DATE, 1) 
    cal.set(Calendar.HOUR, 0) 
    cal.set(Calendar.MINUTE, 0) 
    cal.set(Calendar.SECOND, 0) 
    cal.set(Calendar.MILLISECOND, 0) 

Date startOfTheMonth = cal.time 

LocalDateTime localDateTime = new LocalDateTime() 
    localDateTime = localDateTime.withDayOfMonth(1) 
    localDateTime = localDateTime.withTime(0,0,0,0) 
    localDateTime.minusMonths(6) 

Date dateFromLocalDate = localDateTime.toDateTime().toDate() 

println startOfTheMonth 
println dateFromLocalDate 

assert startOfTheMonth.equals(dateFromLocalDate) 

給我java.util.Date這6小時的休息時間,我在中部標準時間(GMT +6)

如何將我的LocalDateTime追溯到一個java.util.Date使得比賽時間?

+0

只是爲了晉級,我使用Groovy版本這個例子:1.6.7 JVM:1.6.0_16在Linux上使用喬達時間1.6

進行轉換時也可以更加明確 –

回答

1

編輯:

的問題是指示上午或下午的時間使用Calendar.HOUR

要麼使用:

cal.set(Calendar.HOUR_OF_DAY, 0) 

或:

cal.set(Calendar.AM_PM, Calendar.AM) 
cal.set(Calendar.HOUR, 0) 
+0

我不清楚我的例子,爲了清楚起見,我已經更新了我的意思,並且使用了equals()。 (Groovy使用'=='處理日期平等[它使用equals()]和'is'作爲標識) –

+0

??我認爲錢德拉是正確的,因爲你的例子現在存在「startOfTheMonth」=「Fri Jan 01 12:00:00 CST 2010」和dateFromLocalDate是「Fri Jan 01 00:00:00 CST 2010」,他們已經關閉了12小時,而不是6小時,你會得到CST抵消格林威治標準時間。如果您切換到HOUR_OF_DAY而不是HOUR,則斷言有效。 –

+0

我得到了不同的結果:startOfTheMonth =「Jan 01 12:00:00 CST 2010」和dateFromLocalDate =「dateFromLocalDate」示例斷言是否適合您? –

4
轉換期間

某處,正在使用錯誤的時區。通過查看默認時區爲TimeZone.getDefault()以及Joda-Time默認時間是DateTimeZone.getDefault()進行調試。

localDateTime.toDateTime(yourDesiredZone).toDate()

相關問題