日期时间转换格式错误(白天?)

时间:2019-04-26 09:37:42

标签: .net vb.net datetime

我调用了一个肥皂网络服务,该服务以以下格式返回带有生日的xml:

1948-03-13+02:00

我还有一个帮助程序类,该类将XML转换为对象,以便我可以访问它。

这通常没问题,但是在这种情况下,当我测试变量(一个DateTime变量)的值时,它会返回

12/03/1948 23.00.00

似乎删除了2个小时,所以当我保存日期时,可能会存储错误的日期。

可能是夏时制的问题吗?在那个时期的意大利,白天变了

helper类是一个自动生成的代码,问题出在此字段中:

Private dataRegolarizzazioneField As Date
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="date")>  _
    Public Property dataRegolarizzazione() As Date
        Get
            Return Me.dataRegolarizzazioneField
        End Get
        Set
            Me.dataRegolarizzazioneField = value
        End Set
    End Property

2 个答案:

答案 0 :(得分:2)

这个人的生日是1948年的夏令时。

许多对日期/时间数据类型的应用得益于对时区的勤奋处理。这对出生日期而言不是 。考虑一下:如果您的生日是3月27日,并且您出生在意大利,并且前往澳大利亚,则您的生日是3月27日,整天在澳大利亚。为了计算您的年龄,我们将您的出生日期与当地时间的当前日期进行比较。

因此,您需要使用当地时间。去除时区偏移量。如果您输入的字符串格式一致,则可以使用它。

 const string pattern = 'yyyy-MM-dd';
 datestring = datestring.Substring(0,10);
 DateTime birthdate;
 if (!DateTime.TryParseExact(datestring, 
                             pattern,
                             null,
                             DateTimeStyles.AssumeLocal, 
                             out birthdate)) {
   /* handle date parse error */
 }

Dotnet's date format strings are here

如果将其存储在SQL数据库中,请对该列使用DATE数据类型;通常不会考虑当前时区。

答案 1 :(得分:0)

也许是它的类型,而不是白天。 https://docs.microsoft.com/en-us/dotnet/standard/datetime/choosing-between-datetime

当我处理时间和日期时,我使用DateTimeOffset,但我没有遇到类似的问题。更改为DateTimeOffset,以查看其是否有效。