繁体   English   中英

在C#中比较时间值时如何照顾DST

[英]How to take care of DST while comparing time values in C#

我有两个时间比较(如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在我的代码中有问题吗? 如果是这样,您能否在比较中帮助DST。

编辑1:

1st Timing value = 02/23/2012 09:08 AM(它是从太平洋地区转换而来的,转换前是02/23/2012 12:08 AM)

第二时间值 = 02/23/2012 08:08 AM(转换前为02/23/2012 01:38 PM)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM