【问题标题】:SQL datetime to C# string and back to SQL datetimeSQL 日期时间到 C# 字符串并返回到 SQL 日期时间
【发布时间】:2025-12-31 04:35:11
【问题描述】:

我有一个从 sql 格式获取数据的 webservice 方法 2012-11-18 11:21:03 当我将其保存为 C# 字符串时,它变为以下格式:18.11.2012 11:21:03 如何将其改回 SQL 格式 2012-11-18 11:21:03

【问题讨论】:

    标签: c# .net sql datetime


    【解决方案1】:

    再次将其解析为日期时间

    DateTime myTime = DateTime.Parse(myString);
    

    然后回到正确的字符串

    myTime.ToString("yyyy-MM-dd HH:mm:ss");
    

    或者只是将其读入日期时间并去掉中间人。

    【讨论】:

    • 我会使用 DateTime myTime = DateTime.ParseExact(myString, "yyyy-MM-dd HH:mm:ss", CultureInfo.CurrentCulture);
    【解决方案2】:

    您可以通过使用格式字符串"u" 来获得通用可排序的字符串格式(类似于 SQL 服务器使用的格式),如下所示:

    var dateTimeString = String.Format("{0:u}", yourDateTime);
    

    【讨论】:

    • 包含一个“Z”,例如 '2017-02-19 12:21:02Z'
    【解决方案3】:

    只需运行以下代码,

    var newDateTime = oldDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
    

    它只是将其转换回SQL Format DATETIME

    【讨论】:

    • 这样做会去除“oldDateTime”的时间部分,并且仅在 oldDateTIme 已经是开始的日期时间时才有效
    【解决方案4】:

    日期作为字符串的问题在于它们不明确,并且格式可能会根据您在世界上的位置甚至本地机器设置而有所不同。您可能会假设日期字符串是 yyyy-mm-dd 但如果它实际上是 yyyy-dd-mm 怎么办?有些日期似乎有效,有些日期无效。

    换句话说,2013-02-10 是 2 月 10 日还是 10 月 2 日?如果它只是一个字符串,您将无法确定其意图。

    #Haedrian 建议的最佳选择是存储在 DateTime C# 对象中,而不是字符串中。这样它就不会模棱两可,您可以访问各种特定日期的功能。如果您必须存储为字符串,则可以如上所述转换回日期或使用

    DateTime.TryParse(datestring, out dateVariable);
    

    不会为无效格式抛出异常。取决于你是否想要例外!

    我还建议您是否必须使用字符串才能在字符串中使用 3 个字符的月份,这再次消除了歧义,例如

    "dd-MMM-yy hh:mm tt"
    

    【讨论】:

    • 如果它只是一个字符串,你无法确定它的意图。 如果只有一种方法可以ParseExact你想要的格式