我要比较两个时间(String
)。这些时间值是格式,因为可以从下面的代码中理解:
第一个时间点:
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");
如上所示,我想将系统文件时序与DB记录中的时序进行比较。 在这里,我看到即使在转换为UTC然后比较字符串之后也存在不等时序的潜在问题。
我知道在这里比较一个文件(比如 file1 )的时间是相等的。但程序(或)应用程序返回时它们不相等。
我的代码中是否存在DST问题? 如果是这样,你可以在比较中帮助处理DST。
EDIT1:
第一时间值 = 02/23/2012 09:08 AM(它是从太平洋区转换而来,转换之前是02/23/2012 12:08 AM)
第二时间值 = 02/23/2012 08:08 AM(转换前是02/23/2012 01:38 PM)
答案 0 :(得分:1)
我认为第一次转换(fileTime
)是返回错误值的转换。我不在PST,我的文化使用24小时制,所以我必须使用以下代码模拟你的第一个代码示例:
// 02/23/2012 12:08 AM (instead of reading LastWriteTime)
DateTime original = new DateTime(2012, 02, 23, 00, 08, 00);
// instead of ToUniversalTime(), which would use my local time zone
TimeZoneInfo pstzone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(original, pstzone);
// instead of a plain ToString(), which would use my local culture
CultureInfo us = CultureInfo.CreateSpecificCulture("en-US");
String display = utc.ToString("MM/dd/yyyy hh:mm tt", us);
// output: display = 02/23/2012 08:08 AM
所以,它"适用于我的机器"。我建议你在你的机器上试试这个。如果它也能正常工作,请逐步替换部件(新的DateTime - > LastWriteTime; ConvertTimeToUtc - > ToUniversalTime;等等),直到您到达原始的单行示例。注意哪一步导致转换失败 - 现在您知道哪个部分负责返回错误的结果。