【问题标题】:Convert string in to the DateTimeoffset in SQL Server在 SQL Server 中将字符串转换为 DateTimeoffset
【发布时间】:2017-04-06 15:19:34
【问题描述】:

我正在尝试从 psql 数据库中提取数据并使用 BizTalk 将它们插入到 SQL Server 数据库中。 psql 中有一个名为createddate 的列,类型为TimeStamp,时区类似于6/30/2016 12:00:00 AM

我想将该数据插入到名为DateCreated 的类型为datetimeoffset 的SQL Server 列中。由于我使用的是 BizTalk,所有数据都作为 sting 处理,所以我使用以下脚本,如

public string ConvertDateCreated(string dateCreated)
{
     System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
     return DateTime.ParseExact(dateCreated, "MMddyyyy", provider).ToString("yyyyMMdd");
} 

但是它抛出了一个错误:

字符串未被识别为有效的日期时间。

异常类型:FormatException
来源:mscorlib
目标站点:System.DateTime ParseExact(System.String, System.String, System.Globalization.DateTimeFormatInfo, System.Globalization.DateTimeStyles)

以下是标识异常发生位置的堆栈跟踪

在 System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
在 System.Xml.Xsl.CompiledQuery.Script1.ConvertDateCreated(String dateCreated)
在(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}运行时,XPathNavigator {urn:schemas-microsoft-com:xslt-debug}当前)
在(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}运行时,XPathNavigator {urn:schemas-microsoft-com:xslt-debug}当前)
在根目录(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
在执行(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
在 System.Xml.Xsl.XmlILCommand.Execute(对象 defaultDocument,XmlResolver 数据源,XsltArgumentList argumentList,XmlSequenceWriter 结果)
在 System.Xml.Xsl.XmlILCommand.Execute(对象 defaultDocument、XmlResolver 数据源、XsltArgumentList 参数列表、XmlWriter 编写器)
在 System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable 输入,XsltArgumentList 参数,XmlWriter 结果,XmlResolver documentResolver)

【问题讨论】:

  • 你有从原始数据库返回的日期字符串的例子吗?
  • 就像6/30/2016 12:00:00 AM
  • 那么你的格式应该是dd/MM/yyyy HH:mm:ss
  • @PaulF 在原始数据库中就像6/30/2016 12:00:00 AM
  • 您可能需要修改 ParseExact 格式以匹配 - 因为这与“MMddyyyy”不同。

标签: c# sql biztalk psql biztalk-2013


【解决方案1】:

对于 ParseExact,您的源日期格式应类似于 "M/dd/yyyy hh:mm:ss tt"。

public static string ConvertDateCreated(string dateCreated)
{
    System.Globalization.CultureInfo provider = 
         System.Globalization.CultureInfo.InvariantCulture;
    return DateTime.ParseExact(dateCreated, "M/dd/yyyy hh:mm:ss tt", provider)
             .ToString("yyyyMMdd");
}

【讨论】:

    【解决方案2】:

    适用于我的时区 sql server datetimeoffset 类型的格式是:

    c.CreationDateTime = DateTime.ParseExact(rdr["CreationDateTime"].ToString(),
                         "dd/MM/yyyy HH:mm:ss zzz", 
                         CultureInfo.InvariantCulture);
    

    【讨论】:

      【解决方案3】:

      首先你需要得到你的 psql 日期时间"M/d/yyyy hh:mm:ss tt"的日期时间格式

      然后使用DateTimeOffset解析你的psql datetime

      public static string ConvertDateCreated(string dateCreated)
          {
              System.Globalization.CultureInfo provider =  System.Globalization.CultureInfo.InvariantCulture;
              return DateTimeOffset.ParseExact(dateCreated, "M/d/yyyy hh:mm:ss tt", provider).ToString();
          }
      

      要检查结果,请使用您的 sql datetimeoffset 转换输出

      select cast('6/30/2016 12:00:00 AM +00:00' as datetimeoffset)
          
      

      试试 .NET fiddle https://dotnetfiddle.net/ZdpLFA

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多