如何识别与DateTime一起使用的字符串格式?

时间:2012-01-13 19:38:03

标签: c#

我有一个返回日期时间字符串的数据库脚本,我的问题是我不知道我的字符串是什么格式。原因是我有不同文化的桌面,他们可以返回任何类型的格式。我的最终目标是,从字符串返回DateTime。 当我想写一些东西时,我意识到我需要尝试任何一种格式,以确保有一些东西回到我身边而没有例外。 没有反复试验,应该有更好的方法来做到这一点。 这就是我所拥有的,但它只适用于几种格式:

    public static DateTime FromQueryResultString(string dttmString)
    {
        string[] formats = { "dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss", "dd.MM.yy hh:mm", "M/d/yy h:mm tt", "ddd MMM dd H:mm:ss yyyy", "dd.MM.yy hh:mm", "dd.MM.yy HH:mm","ddd MMM yy H:mm:ss yyyy" };

        string name = Thread.CurrentThread.CurrentCulture.Name;
        IFormatProvider format = new CultureInfo(name, false);
        DateTime formattedDate = DateTime.ParseExact(dttmString, formats, format, DateTimeStyles.None);
    }

3 个答案:

答案 0 :(得分:3)

试试这个:

DateTime parsedDate;

if(DateTime.TryParse(dttmString, parsedDate)) 
{ 
      //TODO
}

答案 1 :(得分:0)

您可以通过CultureInfo.CurrentCulture property设置当前文化。然后,您可以从CultureInfo返回对象的Property DateTimeFormat中获取日期时间格式。这意味着Windows可以处理它,您无需进行任何特殊的手动处理。

编辑:示例代码

public static DateTime FromQueryResultString(string dttmString) 
{ 
    string[] formats = { "dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss"
    IFormatProvider format = Thread.CurrentThread.CurrentCulture.DateTimeFormat;
    DateTime formattedDate = DateTime.ParseExact(dttmString, formats, format, System.Globalization.DateTimeStyles.None);
} 

答案 2 :(得分:0)

我认为你错过了一个基本概念。

考虑到你在谈论一个DataBase脚本,它是一个脚本,我想象一下,它从数据库返回一个数据。您的数据库必须始终一种通用格式保存DateTime,浮点数和其他文化敏感数据。在这种情况下,您将拥有一个稳定的数据访问层,可以恢复和处理从罗马,巴黎,北京或阿布扎比恢复的数据。 客户端程序,数据将以文化相关的方式可视化

简而言之:选择一种格式并以这种方式存储。

很明显,这种体系结构不是总是可能拥有,但从我的经验来看,99%的情况都是可能的。

希望这有帮助。