【发布时间】:2016-10-05 18:49:16
【问题描述】:
我试图缩短约会时间,但结果我得到了多一天。像“2014-01-03 00:00:00”这样的日期可以,但是当时间是“23:59:59”时它会失败。
EntryDate="2014-01-03 23:59:59"
但得到结果=“2014-01-04”
try
{
DateTime exact = DateTime.ParseExact(EntryDate, "yyyyMMdd", (IFormatProvider)CultureInfo.InvariantCulture);
mventryAttrib.Value = (exact.ToLocalTime().ToString("yyyy-MM-dd"));
}
catch (FormatException ex)
{
try
{
DateTime exact = DateTime.ParseExact(EntryDate, "yyyy-MM-dd HH:mm:ss", (IFormatProvider)CultureInfo.InvariantCulture);
mventryAttrib.Value = (exact.ToLocalTime().ToString("yyyy-MM-dd"));
}
catch
{
}
【问题讨论】:
-
在对 ParseExact 的调用结束时添加 .Date 怎么样(以删除时间组件)。此外,根据原始时区,ToLocalTime() 是否不会弄乱日期?
-
这是由于
ToLocalTime。如果您所在的时区会增加小时数,那么这会将其撞到 2014-01-04。 -
如果您不在乎时间,为什么要转换为当地时间?这将调整时间,使第二天您的时区提前。如果您只是将
exact转换为字符串,那么它将为您提供正确的日期。 -
最有可能的问题是您将解析时间转换为本地时间。例如,如果您位于 UTC+2 时区且准确时间为 Utc,则转换后的日期时间将为“2014-1-4 1:59:59”,因此 mventryAttrib.Value 将为“2015-01-04 "。
-
顺便说一句,您不需要使用显式转换为
IFormatProvider接口,因为CultureInfo类已经 实现了它。只需CultureInfo.InvariantCulture就足够了。
标签: c# parsing datetime localtime