我调用一个 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
以查看它是否有效。