将 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 时间戳?