我调用了一个肥皂网络服务,该服务以以下格式返回带有生日的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
答案 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
,以查看其是否有效。