2014-08-28 27 views
5

Mi è stato assegnato il codice che utilizza la funzione dateTimeFormat. Lo sviluppatore originale ha utilizzato una maschera di "MM-HH-YY-dd-NN". Questo codice funziona sulla sua macchina. E funziona sul nostro server di test. Ma non funziona sulla mia macchina locale. Posso farlo funzionare solo quando cambio la maschera in "MM-HH-aa-gg-NN";Modelli di maschere validi per dataTimeFormat

nota la differenza qui è la maiuscola "YY" e la minuscola "aa"

Nel guardare la documentazione a https://wikidocs.adobe.com/wiki/display/coldfusionen/DateTimeFormat sembra minuscolo YY è il modo supportato ufficialmente di fare le cose.

Qualcuno sa perché YY sarebbe supportato in alcune situazioni e non in altre? Sospetto che possa esserci qualche codice di localizzazione da qualche parte, ma non trovo alcuna differenza tra il mio amministratore CF e quello sul server di prova. C'è qualcosa che posso fare sulla mia macchina per far funzionare il YY?

La mia macchina è un Windows 7 VM in esecuzione su Mac, mentre il server è un server Windows 2008.

mio JVM è 1.6.0_29 mentre il server è in esecuzione 1.7.0

Sono queste differenze sufficienti per spiegare il problema?

Ecco alcune semplici righe di codice per il test:

<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> 

Sembra che il problema sia nella versione Java sottostante. L'errore che ottengo è:

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

L'esatto rilascio di CF e il livello di patch sono probabilmente più rilevanti delle versioni di JVM e OS qui. –

+0

@AdamCameron Entrambi sono aggiornati. ColdFusion 10,287689. HotFix 13 –

+2

@Adam, non mi sorprenderebbe se il problema fosse correlato alla differenza nella versione di JVM. Ci sono state alcune altre incongruenze con il comportamento di ColdFusion durante lo spostamento da Java 6 a 7. –

risposta

2

Java è cambiato. A ColdFusion non interessa. Passa direttamente attraverso l'argomento della maschera.

Alcuni punti salienti dalle Java 7 docs

Capitale Y è un "anno della settimana"

Un anno di settimana è sincronizzato con un ciclo WEEK_OF_YEAR. Tutte le settimane comprese tra la prima e l'ultima settimana (inclusa) hanno lo stesso valore di settimana. Pertanto, il primo e l'ultimo giorno di una settimana possono avere valori di anno solare diversi.

Se è specificato l'anno della settimana 'Y' e il calendario non supporta nessuno degli anni di settimana , viene utilizzato l'anno di calendario ('y').