我正在尝试在进程中加载日期时间和时间字符串
DateTime strTime = DateTime.ParseExact(strTime.Trim(), "dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
我有几个地方来处理日期时间字符串,来自dateTimePicker:
UseDate = dateTimePicker1.Value.ToString("MMMM dd, yyyy - dddd");
写入然后从文件加载:
dateTimePicker3.Value = DateTime.ParseExact(DB, "yyyy-MM-dd", CultureInfo.InvariantCulture);
它适用于英语,但不知道如果用户有不同的设置,如中文或俄语,如何防止,在这种情况下我得到:
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Additional information: String was not recognized as a valid DateTime.
我可以使用替换"/"
,"."
来阻止输入不同的标点符号,并删除字符串中的所有单词,但在这种情况下,我不确定如何找出正确的方法。
例如,在调试中,我看到strTime
带有俄语"апреля 10, 2017 - понедельник"
字符串,但是如何将其更改为无需单词的正确可读日期。我无法使用正则表达式处理它,因为在结果中我可以获得类似102017
或至少10.20.17
但不是10 April of 2017
的内容,它必须是10.04.2017
或{{1 }}或10/04/2017
或甚至以不同的顺序10-04-2017
等
答案 0 :(得分:2)
您不必执行任何字符串操作来将string
解析为DateTime
,只需要正确的CultureInfo和格式字符串。使用您的示例字符串,解析它的方式如下:
string strTime = "апреля 10, 2017 - понедельник";
CultureInfo ci = new CultureInfo("ru-RU");
DateTime dateParsed = DateTime.ParseExact(strTime, "MMMM dd, yyyy - dddd", ci);
如您所见,使用适当的文化和格式字符串,可以正确解析日期。
BTW,值得注意的是,使用ParseExact
您可以拥有任意数量的格式字符串,只需使用string[]
:
string[] formats = new string[]
{
"MMMM dd, yyyy - dddd", "dd/MM/yyyy", "MM-dd-yyyy"
};
DateTime dateParsed = DateTime.ParseExact(strTime, formats, ci);
答案 1 :(得分:1)
您正在使用DateTime.ParseExact,这意味着您提供的格式掩码应与您要传递的字符串完全匹配,以转换为日期时间。
如果俄语转换该字符串(“апреля10,2017 - понедельник”),您应提供此类型的面具以及相应的CultureInfo
interval.Interval
现在,如果你有不同的格式要解析你可以传递,作为ParseExact的第二个参数是一个像这样的字符串格式数组
"MMMM dd, yyyy - dddd"