设置DateTime的格式-如何保持DateTime格式的值
本文关键字:格式 DateTime 何保持 设置 | 更新日期: 2023-09-27 18:21:07
我创建了一个格式为dd/MM/yyyy HH:mm:ss
的DateTime。我正在编写与第三方SOAP库交互的代码,该库需要格式为yyyy-MM-dd HH:mm:ss
的DateTime变量。
为了调用第三方SOAP库,即不在系统范围内更改日期,我如何更改DateTime变量中存储信息的方式?
我调查过CultureInfo,它有点令人困惑,可能是一个过于永久的解决方案;我唯一需要更改DateTime的时间是针对此单个调用的实例。
作为解释,库具有函数GetOrders(DateTime startDate, DateTime endDate, TradingRoleCodeType roleType, OrderStatusCodeType statusType)
。当尝试在创建DateTimes的情况下执行函数时,它会生成一个错误"对不起,结束日期丢失、无效或在开始日期之前。必须是YYYY-MM-DD或YYYY-MM-DD HH:MI:SS格式,并且在开始日期之后。"。考虑到以dd/MM/yyyy HH:mm:ss
形式传入的格式,我认为这可能是问题所在。
我有一个正在创建的DateTime,格式为dd/MM/yyyy HH:ii:ss
不,你没有。您有一个DateTime。它没有格式。这是一个数字,在文档中有很好的记录。字符串形式从未在存储的DateTime中使用,只有在生成用于表示的字符串时才使用。
如何更改信息在DateTime中的存储方式变量,用于对第三方SOAP库的调用,即没有对日期进行全系统更改?
你没有。我建议你和你的SOAP库谈谈——它不是SOAP顺便说一下,IIRC——你举的例子中的格式在SOAP中是无效的。是的,坏消息。有人想要伪肥皂。
http://www.w3schools.com/schema/schema_dtypes_date.asp
描述了所有有效的日期、时间和日期时间格式,但您的格式不存在。
您可以在线程级别来回更改默认格式,因此一种解决方案是在调用soap库之前设置它。另一个是让某人修复SOAP层以接受标准格式。
您可以创建一个伪日期:
public class SomeClass
{
[XmlIgnore]
public DateTime SomeDate { get; set; }
[XmlElement("SomeDate")]
public string SomeDateString
{
get { return this.SomeDate.ToString("yyyy-MM-dd HH:mm:ss"); }
set { this.SomeDate = DateTime.Parse(value); }
}
}
源:强制XmlSerializer将DateTime序列化为';YYYY-MM-DD hh:MM:ss'--kbrimington
事实证明,正如一些人所指出的,问题与变量是DateTime无关,也与它的"格式"无关,后者不是"格式",但肯定是要理解的方法中信息的表示。
该信息的基本问题是标准时间和UTC时间之间的DateTime比较。第三方库将DateTime检查为UTC DateTime,当在一年中的正确时间发现时间差异时,可能会导致比较DateTime时出现问题;尽管向用户显示的时间在参考时间之后,但在计算时,该时间实际上在参考时间之前,这意味着比较失败。
如果您无法访问第三方库代码,也无法访问足够详细的文档,并且在与所述第三方代码交互时出现错误,那么这个问题的主要结论是询问传递给函数的信息。
特别是,测试各种用例,以确定哪些变量值会导致失败,哪些会导致代码的成功执行;识别一个模式,然后测试确认该模式的特定用例。从那里,确定正在发生的实际错误,并编写代码来解决问题。
在DateTimes的情况下,代码理解DateTimeKinds(如C#),请记住测试不同的DateTimeKind,以确定它们是否可以成为问题的一部分;这种事不常发生在我身上,但它已经发生了(这个问题证明了这一点)。
最后,错误代码没有多大帮助,可能会导致糟糕的问题和糟糕的建议;在类似的情况下,试错似乎是最好的。
如上所述,您不需要更改它的存储方式。您需要根据ISO8601将is格式化为字符串,这就是您的SOAP服务所期望的日期时间参数
检查如何解析和生成ISO 8601格式的DateTime对象和
给定一个DateTime对象,如何获得字符串格式的ISO8601日期?