Date 将日期转换为印度尼西亚语言环境将日期与月份互换
考虑以下日期条目。我想要输入字符串和输出字符串的Date 将日期转换为印度尼西亚语言环境将日期与月份互换,date,locale,railo,Date,Locale,Railo,考虑以下日期条目。我想要输入字符串和输出字符串的DD/MM/YYYY格式 <cfset SetLocale('indonesian') /> <!--- also set in Railo Admin ---> <cfdump var="#GetLocale()#" /> <cfdump var="#LSDateFormat('01/07/2014', 'dd/mm/yyy')#" /> <cfdump var="#LSDateFormat(
DD/MM/YYYY
格式
<cfset SetLocale('indonesian') /> <!--- also set in Railo Admin --->
<cfdump var="#GetLocale()#" />
<cfdump var="#LSDateFormat('01/07/2014', 'dd/mm/yyy')#" />
<cfdump var="#LSDateFormat('31/07/2014', 'dd/mm/yyy')#" />
<cfdump var="#LSDateFormat(Now())#" />
输出:
string in <--- correct for 'indonesian'?
string 07/01/2014 <--- wrong
string 31/07/2014 <--- correct... maybe
string 31/07/2014 <--- correct... maybe
中的
字符串问题是传递给lsDateFormat函数的日期应该是日期对象。如果传入字符串,coldfusion将尝试将该字符串转换为日期对象。假设采用美国日期格式,此自动转换将执行此操作
您可以通过使用createDate函数创建日期来测试这一点。您可以快速构建自己的日期解析函数我拼凑的一个示例如下:
注意:在完整的解决方案中,您必须检查函数的响应是否为未知日期,并相应地采取行动
<cfset SetLocale('indonesian') /> <!--- also set in Railo Admin --->
<cfdump var="#GetLocale()#" />
<cfdump var="#LSDateFormat('01/07/2014', 'dd/mm/yyy')#" />
<cfdump var="#LSDateFormat('31/07/2014', 'dd/mm/yyy')#" />
<cfdump var="#LSDateFormat(Now())#" />
<!--- Now with creating date objects--->
<cfdump var="#LSDateFormat(createDate(2014,07,01), 'dd/mm/yyy')#" />
<!--- Using our own date parser--->
<cfdump var="#LSDateFormat(udf_parseDate('01/07/2014'), 'dd/mm/yyyy')#" />
<cfdump var="#LSDateFormat(udf_parseDate('31/07/2014'), 'dd/mm/yyyy')#" />
<cffunction name="udf_parseDate" output="false" returntype="date">
<cfargument name="value" required="true" type="string">
<cfset var UNKNOWN_DATE = createDate(1900,1,1)>
<cfset var DELIMITER = "/">
<cfset var iDay = 0>
<cfset var iMonth = 0>
<cfset var iYear = 0>
<cftry>
<cfset iDay = getToken(arguments.value,1,DELIMITER)>
<cfset iMonth = getToken(arguments.value,2,DELIMITER)>
<cfset iYear = getToken(arguments.value,3,DELIMITER)>
<cfset tmp = createDate(iYear,iMonth,iDay)>
<cfcatch type="any">
<cfreturn UNKNOWN_DATE>
</cfcatch>
</cftry>
<cfreturn tmp>
</cffunction>
我的建议是远离所有内置本地化功能,因为它们通常无法在完全本地化的应用程序中正常工作。特别是当您需要同时支持多个地区时。e、 g.时区
更新:
为了完整性和技术上更正确
您正在设置的区域设置无效。要获得可用区域设置的完整列表,请执行以下操作:
<cfdump var="#Server.coldfusion.supportedlocales#">
然后您将看到正确的区域设置应为:
<cfset SetLocale('indonesian (indonesia)') />
关于字符串日期总是以美国格式传递的说法,您是否有来源?我本以为这是一个有背景的东西,无论是在Railo还是JVMI都没有任何“硬”证据对不起。然而,我只是玩了一场。如果设置了“有效”区域设置,似乎可以更改行为。我已相应地更新了我的答案。谢谢你让我看这个。:)印尼语言环境似乎有4个可能的字符串:indonesian
/在
中或印尼(印尼)
/在_id
中。只有最后两个设置了正确的日期输入,我怀疑前两个根本没有做任何事情,因为它们看起来像美国地区。
区域设置中的印尼语
/是否“无效”?我不知道,但它没有按预期工作。其他用户注意:我接受此答案,但阅读所有内容,包括评论,因为只有更新部分回答了问题。UDF在这件事上做得太过火了。