格式错误的日期时间转换(日光?



我调用一个 soap Web 服务,它以这种格式返回带有出生日期的 xml:

1948-03-13+02:00

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

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

12/03/1948 23.00.00

似乎它删除了 2 小时,因此当我保存日期时,我存储了错误的日期。

可能是夏令时的问题? 在那个时期的意大利,日光发生了变化

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

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

这个人的生日是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 的日期格式字符串在这里。

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

也许,它是类型而不是日光。https://learn.microsoft.com/en-us/dotnet/standard/datetime/choosing-between-datetime

当我使用时间和日期时,我使用DateTimeOffset并且我没有这样的问题。更改为DateTimeOffset以查看它是否有效。

最新更新