2014-08-28 27 views
5

我被給出了使用dateTimeFormat函數的代碼。最初的開發者使用了「MM-HH-YY-dd-NN」的掩碼。此代碼在他的機器上運行。它在我們的測試服務器上運行。但它在我的本地機器上不起作用。當我將掩碼更改爲「MM-HH-yy-dd-NN」時,我只能使其工作。dateTimeFormat的有效掩碼模式

注意這裏的區別是大寫的「YY」和小寫字母「YY」

。在https://wikidocs.adobe.com/wiki/display/coldfusionen/DateTimeFormat看文檔,它看起來像小寫yy是做事的官方支持的方式。

有誰知道爲什麼YY會在某些情況下得到支持而不是其他人?我懷疑它可能是某處的某個本地化代碼,但我在CF管理員和測試服務器上找不到任何區別。我的機器上有什麼可以做YY的工作嗎?

我的機器是Windows 7的虛擬機在Mac上運行時,該服務器是Windows Server 2008的

我的JVM是1.6.0_29服務器運行時1.7.0

是這些差異足以解釋這個問題?

下面是測試一些簡單的代碼:

<cfscript> 
    testTime=now(); 
    lowermask= "MM-HH-yy-dd-NN"; 
    uppermask= "MM-HH-YY-dd-NN"; 
    result = { 
     lower=dateTimeFormat(testTime, lowermask) 
     ,upper=dateTimeFormat(testTime, uppermask) 
    }; 
    writedump(result); 
</cfscript> 

看起來問題出在底層的Java版本。我得到的錯誤是:

java.lang.IllegalArgumentException: Illegal pattern character 'Y' 
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:768) 
    at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:575) 
    at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:500) 
    at coldfusion.util.DateUtils.getCFDateTimeFormat(DateUtils.java:673) 
    at coldfusion.util.DateUtils.formatDateTime(DateUtils.java:942) 
    at coldfusion.runtime.CFPage.LSDateTimeFormat(CFPage.java:1750) 
    at coldfusion.runtime.CFPage.LSDateTimeFormat(CFPage.java:1742) 
    at coldfusion.runtime.CFPage.DateTimeFormat(CFPage.java:1722) 
    at cftemp2ecfm333879290.runPage(C:\inetpub\wwwroot\temp.cfm:7) 
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244) 
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444) 
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) 
    at coldfusion.filter.IpFilter.invoke(IpFilter.java:64) 
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:449) 
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) 
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:112) 
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) 
    at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79) 
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) 
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58) 
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) 
    at coldfusion.CfmServlet.service(CfmServlet.java:219) 
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414) 
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:204) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
+0

確切的CF版本和修補程序級別可能比JVM和OS版本更重要。 – 2014-08-28 12:07:13

+0

@AdamCameron兩者都是最新的。 ColdFusion 10,287689。 HotFix 13 – 2014-08-28 12:09:24

+2

@Adam,如果問題與JVM版本的差異有關,則不會令我感到意外。從Java 6移動到7時,ColdFusion行爲存在其他一些不一致之處。 – 2014-08-28 14:18:07

回答

2

Java已更改。 ColdFusion並不在乎。它直接傳遞掩碼參數。

幾個亮點來自Java 7的文檔

資本Y是「週年」

週年與WEEK_OF_YEAR週期同步。第一週和最後一週(含)之間的所有星期都具有相同的週年價值。 因此,每週的第一天和最後一天可能會有不同的日曆年的 值。

如果指定週年'Y'且日曆不支持任何 週年,則將使用日曆年('y')代替。