我被給出了使用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)
確切的CF版本和修補程序級別可能比JVM和OS版本更重要。 – 2014-08-28 12:07:13
@AdamCameron兩者都是最新的。 ColdFusion 10,287689。 HotFix 13 – 2014-08-28 12:09:24
@Adam,如果問題與JVM版本的差異有關,則不會令我感到意外。從Java 6移動到7時,ColdFusion行爲存在其他一些不一致之處。 – 2014-08-28 14:18:07