阻止用户系统设置时间和日期字符串处理

时间:2017-04-10 15:40:54

标签: c# winforms date datetime time

我正在尝试在进程中加载​​日期时间和时间字符串

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

2 个答案:

答案 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"