C# 强制DateTime.Parse对于不变日期失败

C# 强制DateTime.Parse对于不变日期失败,c#,datetime,cultureinfo,datetime-parsing,invariantculture,C#,Datetime,Cultureinfo,Datetime Parsing,Invariantculture,我将简短地开始,然后在结尾给出细节。考虑下面的代码: CultureInfo cultureToTest = new CultureInfo("hu-HU"); Thread.CurrentThread.CurrentCulture = cultureToTest; DateTime testDateTime = new DateTime(2014,12,13,23,24,25); String testString = testDateTime.ToString(Cultu

我将简短地开始,然后在结尾给出细节。考虑下面的代码:

CultureInfo cultureToTest = new CultureInfo("hu-HU");
Thread.CurrentThread.CurrentCulture = cultureToTest;
DateTime testDateTime = new DateTime(2014,12,13,23,24,25);
String testString = testDateTime.ToString(CultureInfo.InvariantCulture);
DateTime actualDateTime = DateTime.Parse(testString);
问题是是否有任何可能的
cultureToTest
值会导致
DateTime.Parse调用引发异常或返回错误的值


背景: 这是针对一组单元测试的。有一个代码体调用
DateTime.Parse
,但不指定区域性。我担心的是,当这个代码在不变量或en-US文化中传递一个日期时,代码可能会在某些文化中失败。我建议的解决方案是将该代码更改为

DateTime.Parse(string, CultureInfo.InvariantCulture)
在这些情况下

为了对更改进行单元测试,我需要使用一个区域性调用新代码,该区域性会使原始的
DateTime.Parse(string)
失败,然后显示更改后的代码将成功


问题是,我还没有找到一种文化能为我做到这一点。我打算试着制造一个,但我想先问一个更一般的问题。

它为
en GB
抛出了一个例外

这是因为不变区域性数据格式设置为
MM/dd/yyyy
。对于
en GB
,它是
dd/MM/yyyy
,这意味着您试图解析的日期中的月份设置为
13
,这是不正确的

对于日期低于
13
的日期,将毫无例外地解析输入字符串,但结果将不正确(除非日期和月份是相同的数字)。

使用此代码:

StringBuilder sb = new StringBuilder();
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
    try
    {
        Thread.CurrentThread.CurrentCulture = culture;
        DateTime testDateTime = new DateTime(2014, 12, 13, 23, 24, 25);
        String testString = testDateTime.ToString(CultureInfo.InvariantCulture);
        DateTime actualDateTime = DateTime.Parse(testString);
        Console.WriteLine(actualDateTime.Day.ToString());
    }
    catch (Exception ex)
    {
       sb.AppendLine(culture.ToString());
    }
}

Console.WriteLine(sb.ToString());
分析该日期时,以下区域性引发异常:

am
am-ET
ar
ar-AE
ar-BH
ar-DZ
ar-EG
ar-IQ
ar-JO
ar-KW
ar-LB
ar-LY
ar-MA
ar-OM
ar-QA
ar-SA
ar-SY
ar-TN
ar-YE
arn
arn-CL
as
as-IN
az
az-Cyrl
az-Cyrl-AZ
az-Latn
az-Latn-AZ
ba
ba-RU
be
be-BY
bg
bg-BG
bn
bn-BD
bn-IN
br
br-FR
bs
bs-Cyrl
bs-Cyrl-BA
bs-Latn
bs-Latn-BA
ca
ca-ES
ca-ES-valencia
co
co-FR
cs
cs-CZ
cy
cy-GB
da
da-DK
de
de-AT
de-CH
de-DE
de-LI
de-LU
dsb
dsb-DE
dv
dv-MV
el
el-GR
en-029
en-AU
en-BZ
en-GB
en-HK
en-IE
en-IN
en-JM
en-MY
en-NZ
en-SG
en-TT
en-ZW
es
es-419
es-AR
es-BO
es-CL
es-CO
es-CR
es-DO
es-EC
es-ES
es-GT
es-HN
es-MX
es-NI
es-PA
es-PE
es-PR
es-PY
es-SV
es-UY
es-VE
et
et-EE
fa
fa-IR
ff
ff-Latn
ff-Latn-SN
fi
fi-FI
fo
fo-FO
fr
fr-BE
fr-CD
fr-CH
fr-CI
fr-CM
fr-FR
fr-HT
fr-LU
fr-MA
fr-MC
fr-ML
fr-RE
fr-SN
fy
fy-NL
ga
ga-IE
gd
gd-GB
gl
gl-ES
gn
gn-PY
gsw
gsw-FR
gu
gu-IN
ha
ha-Latn
ha-Latn-NG
he
he-IL
hi
hi-IN
hr
hr-BA
hr-HR
hsb
hsb-DE
hy
hy-AM
id
id-ID
ig
ig-NG
is
is-IS
it
it-CH
it-IT
iu
iu-Cans
iu-Cans-CA
iu-Latn
iu-Latn-CA
jv
jv-Latn
jv-Latn-ID
ka
ka-GE
kk
kk-KZ
kl
kl-GL
km
km-KH
kn
kn-IN
kok
kok-IN
ky
ky-KG
lb
lb-LU
lo
lo-LA
lv
lv-LV
mg
mg-MG
mi
mi-NZ
mk
mk-MK
ml
ml-IN
mr
mr-IN
ms
ms-BN
ms-MY
mt
mt-MT
my
my-MM
nb
nb-NO
nl
nl-BE
nl-NL
nn
nn-NO
no
nqo
nqo-GN
nso
nso-ZA
oc
oc-FR
om
om-ET
or
or-IN
pa
pa-Arab
pa-Arab-PK
pa-IN
pt
pt-AO
pt-BR
pt-PT
qut
qut-GT
quz
quz-BO
quz-EC
quz-PE
rm
rm-CH
ro
ro-MD
ro-RO
ru
ru-RU
rw
rw-RW
sa
sa-IN
sah
sah-RU
sd
sd-Arab
sd-Arab-PK
se
se-FI
se-NO
sk
sk-SK
sl
sl-SI
sma-NO
smj-NO
smn
smn-FI
sms
sms-FI
sn
sn-Latn
sn-Latn-ZW
so
so-SO
sq
sq-AL
sr
sr-Cyrl
sr-Cyrl-BA
sr-Cyrl-CS
sr-Cyrl-ME
sr-Cyrl-RS
sr-Latn
sr-Latn-BA
sr-Latn-CS
sr-Latn-ME
sr-Latn-RS
sv-FI
syr
syr-SY
ta
ta-IN
ta-LK
te
te-IN
tg
tg-Cyrl
tg-Cyrl-TJ
th
th-TH
ti
ti-ER
ti-ET
tk
tk-TM
tn
tn-BW
tn-ZA
tr
tr-TR
tt
tt-RU
tzm
tzm-Latn
tzm-Latn-DZ
tzm-Tfng
tzm-Tfng-MA
uk
uk-UA
ur
ur-IN
ur-PK
uz
uz-Cyrl
uz-Cyrl-UZ
uz-Latn
uz-Latn-UZ
vi
vi-VN
wo
wo-SN
yo
yo-NG
zgh
zgh-Tfng
zgh-Tfng-MA
zh-Hant
zh-HK
zh-MO
zh-SG
zu
zu-ZA
zh-CHT

太棒了,谢谢。我在看“异国情调”文化,没有找到任何。感谢你不仅回答了这个问题,还向我展示了我懒得写你刚刚发布的代码的结果。感谢你的代码,我发现“ar SA”(阿拉伯语(沙特阿拉伯))对我来说是一种更好的文化。它不仅在
新日期时间(2014、12、13、23、24、25)
上失败,而且在
新日期时间(2001、01、01、0、0、0)
上也失败。