Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 将日期转换为印度尼西亚语言环境将日期与月份互换_Date_Locale_Railo - Fatal编程技术网

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在这件事上做得太过火了。