设置DateTime的格式 - 如何保持DateTime格式的值?

时间:2014-09-08 12:38:00

标签: c# datetime cultureinfo

我有一个以dd/MM/yyyy HH:mm:ss格式创建的DateTime。我正在编写与需要DateTime变量的第三方SOAP库交互的代码,格式为yyyy-MM-dd HH:mm:ss

如何更改信息在DateTime变量中的存储方式,以便调用第三方SOAP库,即系统范围内没有更改日期?

我调查了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传递的格式,我认为这可能是问题所在。

4 个答案:

答案 0 :(得分:2)

  

我有一个以dd / MM / yyyy HH格式创建的DateTime:ii:ss

不,你没有。你有一个DateTime。它没有格式。这是一个数字 - 您可以在文档中详细记录。字符串形式从不在存储的DateTime中使用,仅在生成用于表示的字符串时使用。

  

如何更改DateTime中信息的存储方式   变量,用于调用第三方SOAP库,   即系统范围内的日期没有变化?

你没有。我建议你谈谈你的SOAP库 - 它不是SOAP btw。,IIRC你给出的格式在SOAP中是无效的。是的,坏消息。有人想要Pseudo-Soap。

http://www.w3schools.com/schema/schema_dtypes_date.asp

描述所有有效的日期,时间和日期时间格式,而您的格式不存在。

您可以来回更改线程级别的默认格式,因此一种解决方案是在调用soap库之前设置它。另一个是让某人修复SOAP层以接受标准格式。

答案 1 :(得分:0)

您可以创建一个虚拟日期:

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); }
    }
}

来源:Force XmlSerializer to serialize DateTime as 'YYYY-MM-DD hh:mm:ss' --kbrimington

答案 2 :(得分:0)

事实证明,问题 - 正如一些人所指出的 - 与变量是一个DateTime,也不是它的"格式"这不是"格式",但肯定是要理解的方法中信息的表示。

信息的基本问题是标准时间和UTC时间之间的DateTime比较。第三方库将DateTime视为UTC DateTime,当在一年中的正确时间捕获时间差异时,可能会导致比较DateTime时出现问题;尽管在参考时间之后呈现给用户,但时间实际上是在计算参考时间之前,意味着比较失败。

这个问题的主要内容是询问传递给函数的信息,如果您无法访问第三方库代码,也无法访问具有足够详细信息的文档,并且在与之交互时发生错误第三方代码。

特别是,测试各种用例以确定哪些变量值导致失败以及哪些导致代码成功执行;识别模式,然后测试确认模式的特定用例。从那里,确定正在发生的实际错误和解决问题的代码。

在DateTimes的情况下,代码理解DateTimeKinds,例如C#,记得测试不同的DateTimeKinds以确定它们是否可以成为问题的一部分;它并不经常发生在我身上,但它已经发生了(正如这个问题所证明的那样)。

最后,错误代码不会有太大帮助,可能导致问题不严和建议​​不佳;在类似的情况下,试错法似乎是最好的。

答案 3 :(得分:0)

如上所述,您不需要更改其存储方式。 您需要根据ISO8601格式化为字符串,这是您的SOAP服务期望的datetime参数。

检查How to parse and generate DateTime objects in ISO 8601 format

Given a DateTime object, how do I get an ISO 8601 date in string format?