如何在比较C#中的时间值时处理DST

本文关键字:时间 处理 DST 比较 | 更新日期: 2023-09-27 18:28:29

我有两个时间(作为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在我的代码中是个问题吗?如果是的话,你能帮我在比较中处理夏令时吗

第1版:

第一个定时值=2012年2月23日上午09:08(从太平洋地区转换而来,转换前为2012年2日上午12:08)

第二个定时值=2012年2月23日08:08AM(转换前为2012年2日23日01:38PM)

如何在比较C#中的时间值时处理DST

我认为第一个转换(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;等等),直到您得到原始的单行示例。请注意是哪个步骤导致转换失败——现在您知道是哪个部分导致返回错误的结果了。