【问题标题】:Convert DateTime in to integer将 DateTime 转换为整数
【发布时间】:2023-03-17 20:09:02
【问题描述】:

我试图以整数形式返回今天的日期。我试图将它作为字符串返回,它工作正常。但是如何将它作为整数返回呢?

public string ConvertInvoiceDate()
{
    return DateTime.Today.ToString("yyyyMMdd");
}

整数的格式应与 yyyyMMdd 相同。这里的返回类型是字符串,因为我正在尝试使用字符串。现在我不确定我是否必须返回 long/double。使用 BizTalk 我试图将一个值插入到类型为数字的 Oracle DB 中的字段中。当我尝试以字符串形式返回时,它会以The value for field "INVOICE_DTE" is invalid. ---> System.FormatException: The string '20170626' is not a valid AllXsd value.

的形式抛出错误

数据库中字段的详细信息如下

完整的错误信息是

A message sent to adapter "WCF-Custom" on send port "WcfSendPort_OracleDBBinding_Table_MACINVOICE_Custom" with URI "oracledb://xxxxx/" is suspended. 
 Error details: Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: The value for field "INVOICE_DTE" is invalid. ---> System.FormatException: The string '20170626' is not a valid AllXsd value.
   at System.Xml.Schema.XsdDateTime..ctor(String text, XsdDateTimeFlags kinds)
   at System.Xml.XmlConvert.ToDateTime(String s, XmlDateTimeSerializationMode dateTimeOption)
   at Microsoft.Adapters.OracleCommon.OracleCommonMetadataUtils.ConvertXmlToLob(String text, XmlTypeCode xmlTypeCode, QualifiedType qualifiedType, String fieldName)
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at System.ServiceModel.Channels.IRequestChannel.EndRequest(IAsyncResult result)
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result) 
 MessageId:  {449B56A2-B053-47A4-826A-400B97CFB9A1}
 InstanceID: {DEA7CAA7-D589-4A4E-81A0-A2C6A961D340}

【问题讨论】:

  • 将日期作为整数返回是什么意思?日期应该映射到什么值?如果你想要一个 int,为什么你的函数会返回一个字符串?
  • return 0?如果不定义整数实际代表什么,就无法回答这个问题。
  • 你的方法被声明为返回一个字符串,而不是一个 Int...
  • @Sid Oracle 也有 date 类型。 not 将字符串转换为整数也会有任何问题。错误是 NOT 关于字符串到整数的转换。这是一个 XML 转换错误。 XML 日期通常遵循 ISO8601 格式。
  • @Sid 这显然是一个 XML 错误。它说你试图传递一个无效的XsdDateTime 值。 xsd::datetime是一个使用ISO8601格式的字符串,即2017-06-23T13:14:15Z

标签: c# datetime biztalk


【解决方案1】:

在返回之前将它们转换为整数,如下所示:

public int ConvertInvoiceDate()
{
    return int.Parse(DateTime.Today.ToString("yyyyMMdd"));
}

Try this Example

【讨论】:

  • 上面的代码会给你所需的整数值,但是我对你的实际要求太困惑了,你能评论一下你打算用这个做什么吗?
  • 你拥有的和他拥有的会在 BizTalk 生成的 XML 有效负载中实现相同的输出,所以这不太可能解决。
【解决方案2】:

也许你想做这样的事情?

DateTime.Today.Ticks

它是long,而不是intTicks property reference

【讨论】:

    【解决方案3】:

    如果要查找 DateTime 对象的数值,有一个属性 Ticks,但它是 long 类型,而不是 int。

    https://msdn.microsoft.com/ru-ru/library/system.datetime.ticks(v=vs.110).aspx
    

    【讨论】:

      【解决方案4】:

      投反对票完全错误!这个答案是基于以前版本的问题什么是完全不同的

      等一下!

      不要使用字符串或整数。您需要使用 TryParseExact() 来返回 DateTime。

      【讨论】:

      • 他使用的是DateTime.Today,所以不需要解析日期,因为他已经有了一个日期对象。
      • @Pang 原始版本仍在修订历史记录中。
      【解决方案5】:

      正如 Panagiotis Kanavos 在 cmets 中所说,XML 字段可能定义为使用 ISO8601 格式的 xsd::datetime,即2017-06-23T13:14:15Z

      要实现这一点,您可以执行以下操作,或者更简单地将 datetime functoid 连接到地图中的节点。

      public string ConvertInvoiceDate()
      {
          return DateTime.Today.ToString("o");
      }
      

      【讨论】:

        【解决方案6】:

        再试一次

        int.Parse(DateTime.Today.ToShortDateString().Replace("-",""))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-11
          相关资源
          最近更新 更多