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



我有一个返回日期-时间字符串的数据库脚本,我的问题是我不知道字符串的格式。原因是我有不同区域性的桌面,它们可以返回任何类型的格式。我的最终目标是,从字符串返回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);
    }

试试这个:

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

我认为您缺少一个基本概念。

考虑到您谈论的是数据库脚本,我认为它是一个脚本,它从数据库返回数据。您的数据库必须始终以一种常见格式保存DateTime、浮点数和其他区域性敏感数据。在这种情况下,您将拥有一个稳定的数据访问层,该层将恢复和操作从罗马、巴黎、北京或阿布扎比恢复的数据。客户端程序,数据将以依赖于区域性的方式可视化

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

很明显,这种架构并不总是可能,但根据我的经验,99%的情况下都是可能的。

希望这能有所帮助。

您可以通过CultureInfo.CurrentCulture属性设置当前区域性。然后,您可以从CultureInfo返回对象的属性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);
} 

最新更新