将 DateTime 转换为整数

Posted

技术标签:

【中文标题】将 DateTime 转换为整数【英文标题】:Convert DateTime in to integer 【发布时间】:2017-11-30 10:07:06 【问题描述】:

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

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 【参考方案1】:

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

public int ConvertInvoiceDate()

    return int.Parse(DateTime.Today.ToString("yyyyMMdd"));

Try this Example

【讨论】:

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

也许你想做这样的事情?

DateTime.Today.Ticks

它是long,而不是int。 Ticks 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("-",""))

【讨论】:

以上是关于将 DateTime 转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

翩翩。将字符串转换为日期和日期转换为整数。

在 pandas.Series 中将时间戳转换为 datetime.datetime

将 INT 中的日期转换为 Google Calendar API 的 CreateEvent 的 DateTime

在 Select 语句中将 DateTime 转换为 Unix 时间戳?

将dateTime格式转换为Unix时间戳或将Unix时间戳转换为dateTime格式

将 datetime2 数据类型转换为 datetime 数据错误