将字符串日期和时间转换为DateTime

时间:2016-12-12 20:56:38

标签: c# datetime c#-4.0 datetime-format

我必须运行数千个Word文档并从中创建XML文件。除了日期字段外,一切正常,因为我使用两种语言。

以下是一些例子

  • 日期:2016年11月24日时间:15:31
  • 日期:2016年11月28日高度:10H31

我使用下面的方法对字符串进行了一些清理,但我仍然认为臭名昭着的字符串未被识别为有效的DateTime。'

IFormatProvider culture = null;
if (m.rdoEnglish.IsChecked == true)
{
    culture = new System.Globalization.CultureInfo("en-CA", true);
}
else if (m.rdoFrench.IsChecked == true)
{
    culture = new System.Globalization.CultureInfo("fr-CA", true);
}

string dt = "";
dt = m.txtPublished.Text;

if (dt.IndexOf("HEURE:") != -1)
{
    dt = dt.Replace("HEURE:", "");
}

if (dt.IndexOf("H") != -1)
{
    dt = dt.Replace("H", ":");
}
DateTime dt2;
dt2 = DateTime.ParseExact(dt, "MM/dd/yyyy HH:mm:ss tt", culture);

//Cleaned string looks like this " 28 NOVEMBRE 2016 10:31  "
return dt2;

3 个答案:

答案 0 :(得分:0)

根据您提供的两个示例,您的格式字符串看起来不正确。 它应该像“MMMM dd,yyyy hh:mm” 阅读更多相关信息: DateTime.ParseExact Method

答案 1 :(得分:0)

ParseExact以及TryParseExact有一个重载,它接受用于解析字符串的格式数组。这将允许你使用这样的东西

string test = dt.Replace("DATE: ", "")
                .Replace("TIME: ", "")
                .Replace("HEURE: ", "");

string[] formats = new string[]
{
    "MMMM dd, yyyy HH:mm", "dd MMMM yyyy HH\'H\'mm"
};
DateTime dt2 = DateTime.ParseExact(test, formats, culture, DateTimeStyles.None);

请注意,我不会尝试替换字符串的法语版本中的单个字符H,因为我不知道在您的月份中是否出现相同的字符。

答案 2 :(得分:-1)

如果您需要解析的字符串可以在同一文档中的两种不同文化中,那么您需要更具防御性的编码。

设置两种文化:

IFormatProvider englishCulture = new System.Globalization.CultureInfo("en-CA", true);
IFormatProvider frenchCulture = new System.Globalization.CultureInfo("fr-CA", true);

然后将TryParse与一种文化一起使用,如果失败,请再试一次:

DateTime output;
if (DateTime.TryParseExact(input, frenchFormatString, frenchCulture, out output))
{
    // Read it successfully
}
else if (DateTime.TryParseExact(input, englishFormatString, englishCulture, out output))
{
    // Read it successfully 
}
else
{
    // Unknown format, try something else?
}

如果您有关于文本应该是法语或英语的信息,您可以安排代码,以便首先尝试最有可能的文化。

格式字符串可以包含所有填充字以及实际数据的占位符。即使是TryParseExact的重载也需要一系列格式字符串,因此您可以设置所有(或至少大部分)您遇到的格式。