2011-09-03 170 views
0

任何人都可以想到一個有效的方法來添加時間跨度到日期嗎?將時間跨度添加到日期?

類似以下內容:

<cfset foo = now() + createTimeSpan(15,12,30,30)> 

IIRC在一個基於.NET的CFML引擎我可以簡單地使用date.add(時間跨度),但我不記得相應的Java快捷現在。

在此先感謝。

回答

3

你究竟在問什麼?一方面你已經將它標記爲CF問題並使用CFML來回答你自己的問題;那麼你開始問一個Java的捷徑?

如果你想知道如何在CFML中做到這一點,那麼你的代碼示例你如何在CFML中做到這一點。

如果你想知道如何添加一個CF時間跨度值(這是一個天數的只是一個數字表示)到Java日期的話,好像稍微棘手,因爲日曆的方法我可以找到所有添加時間跨度的組成部分,而不是整個時間跨度。

此代碼演示可能所有你後的答案(除了如何與一個Java日期/日曆做到一重擊):

<cfset dTs = now()><!--- grab now ---> 
<cfset fTimespan = createTimeSpan(15,12,30,30)><!--- make a timespan ---> 
<cfset fLater = dTs + fTimespan><!--- add the timespan to now yields a float ---> 
<cfset sLater = dateFormat(fLater, "yyy-mm-dd") & " " & timeformat(fLater, "HH:MM:SS")><!--- but you can treat a float as a date/time ---> 
<cfset dLater = createOdbcDateTime(fLater)><!--- or convert it back to a date object ---> 

<cfset jCal = createObject("java", "java.util.GregorianCalendar").init()><!--- java.util.Date is basically deprecated in favour of calendars ---> 
<cfset jCal.add(jCal.DAY_OF_MONTH, 15)><!--- one needs to set each part of the timespan separately ---> 
<cfset jCal.add(jCal.HOUR_OF_DAY, 12)> 
<cfset jCal.add(jCal.MINUTE, 30)> 
<cfset jCal.add(jCal.SECOND, 30)> 
<cfset sJCal = jCal.getTime()><!--- this gets a string that CF can use as a date back out of the calendar ---> 
<cfset bIsDate = isDate(sJCal)><!--- demonstrate that last statement to be true ---> 
<cfdump var="#variables#"><!--- and all the results ---> 

是否回答你的任何問題,實際上是?

+0

你可能想嘗試一些藥物來幫助你冷靜下來。 我上面發佈的示例僅返回一個浮點數,因爲存儲時間片的方式,我忘記了與parseDateTime不同,createOdbcDateTime能夠再次轉換結果。 所以,感謝您的回覆,即使答案是用一些非常粗魯的舉止來包裝的。 –

+0

mz_01,你應該指出你只有一個浮點數並且想要一個日期對象作爲你問題的一部分。很多事情可以接受一個數字作爲日期並處理它(例如,cfqueryparam會很好)。我也在想「wtf?這正是你所做的」。我沒有把亞當的答案解釋爲毫無禮貌。 –

+0

另外值得指出的是,parseDateTime在[Railo](http://getrailo.org)中按預期工作,(它將_does_轉換成浮動數據返回日期對象)。如果有人想爲ACF投票,我提出了一個[cfbugs跟蹤器問題](http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=87087)。 –