【发布时间】:2012-04-05 05:02:19
【问题描述】:
我有两个时间要比较(String)。这些计时值是 Format 的,从下面的代码可以理解:
第一次计时值:
String fileTime = new FileInfo(fileName).LastWriteTime.ToUniversalTime().ToString("MM/dd/yyyy hh:mm tt");
第二个计时值:(我取自数据库中可用的印度计时列表)
DateTime date = DateTime.ParseExact(eachBinary.Date, "MM/dd/yyyy hh:mm tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
date = TimeZoneInfo.ConvertTime(date, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"), TimeZoneInfo.Utc);
eachBinary.Date = date.ToString("MM/dd/yyyy hh:mm tt");
正如您在上面看到的,我想将系统文件时间与数据库记录中的时间进行比较。 在这里,即使在转换为 UTC 然后比较字符串之后,我也看到了时间不等的潜在问题。
我知道这里比较一个文件(比如 file1)的时间是相等的。但是程序(或)应用程序返回,因为它们不相等。
我的代码中的夏令时是否存在问题? 如果是这样,请您帮忙比较 DST。
EDIT1:
1st Timing value = 02/23/2012 09:08AM(它是从太平洋地区转换的,转换之前是 02/23/2012 12:08 AM)
2nd Timing value = 02/23/2012 08:08AM(转换前是 02/23/2012 01:38PM)
【问题讨论】:
-
请向我们展示您的测试用例,即向我们展示 (a) 文件时间戳,(b)
fileTime和eachFile.Date的实际值。 -
既然可以直接比较DateTime,为什么还要比较字符串?
-
可能您的时间变量之一有时区信息,而另一个没有。
-
如前所述,请展示一个简短但完整的程序来演示该问题。我同意 Alexei 的观点 - 你为什么要转换成字符串?
-
@stack_pointerisEXTINCT:您应该绝对修复您的架构和代码,以便它使用正确的数据类型。将日期保留为字符串将迫使您在所有地方执行转换,从而混淆您的代码。如果您打算尽快丢弃您的应用程序,那很好 - 但否则您应该修复它,以避免长期问题。不要走捷径 - 正确修复它。 (如果这些字符串代表 local 时间,那就更糟了——在这种情况下,由于 DST 转换的模糊性,您还会丢失数据。)
标签: c# datetime comparison utc dst