【问题标题】:How to convert India Standard Time to SQL date and time in C# [duplicate]如何在 C# 中将印度标准时间转换为 SQL 日期和时间 [重复]
【发布时间】:2016-04-07 13:02:01
【问题描述】:

我想将以下日期和时间格式转换为 SQL 日期和时间 2016 年 4 月 7 日星期四 06:30:00 GMT+0530(印度标准时间) 任何人有想法谢谢。

【问题讨论】:

  • 输入字符串是什么?它真的同时包含 GMT+0530 (India Standard Time) 吗?在将其发送到 SQL Server 之前,您是否尝试将其解析为 DateTimeOffset?柱子的类型是什么? DateTimeOffset(好)或只是 DateTime(忘记时区?)

标签: c# sql-server datetime sqldatetime


【解决方案1】:

由于您的字符串具有 UTC Offset 值,我会将其解析为 DateTimeOffset 而不是 DateTime,因为它可以保存偏移部分。

但是DateTimeDateTimeOffset 都不保留时区信息,您应该使用GMT(India Standard Time) 部分作为字符串文字分隔符。

var s = "Thu Apr 07 2016 06:30:00 GMT+0530 (India Standard Time)";
var dto = DateTimeOffset.ParseExact(s, "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz '(India Standard Time)'", 
                                    CultureInfo.InvariantCulture);

现在你有一个DateTimeOffset 作为{07.04.2016 06:30:00 +05:30}

我会将这个dto 作为datetimeoffset 类型的列插入到SQL Server 中(当然还有parameterized query),因为它也保存了偏移部分。

+---------------------------+
|   Time zone offset range  |
+---------------------------+
|   -14:00 through +14:00   |
+---------------------------+

【讨论】:

    【解决方案2】:

    如果您的输入是字符串,则需要开始解析特定文化的日期:

    DateTime dt =  DateTime.ParseExact(inputString, System.Globalization.CultureInfo("<your_culture>"));
    

    其中&lt;your_culture&gt; 是您所在国家/地区的多种文化名称之一(请参阅http://www.csharp-examples.net/culture-names/

    然后您可以将日期作为与 SQL 兼容的字符串返回,包括简单的引号:

    string sqlDate = dt.ToString("'yyyy-MM-dd HH:mm:ss'");
    

    【讨论】:

    • DateTime 不支持时区或偏移量。正确使用的类型是 DateTimeOffset
    • 当然,这只会在格式之间进行转换。从问题中,我没有推断出他也需要时区转换。
    • 在数据库中以文本形式存储或传递日期不是一个好主意。使用日期参数并避免转换和格式错误要好得多,也更容易。例如,此答案中的格式为 not“SQL 兼容”。它可能看起来像 ISO 8601 格式,但缺少 T 分隔符。它将使用服务器的语言环境进行解析
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2012-08-14
    • 2018-09-12
    相关资源
    最近更新 更多