如何将Datetimes转换为基于UTC的时序值来比较时序-C#

时间:2012-03-15 06:42:26

标签: c# datetime utc formatexception

我的字符串(变量为fileDate)的日期值采用以下格式:

  

2/12/2011 11:58 AM

现在我想将此转换为日期然后转换为UTC时间,因为我在比较不同机器中的日期时遇到问题,所以*我总是希望将所有字符串(要比较的字符串)转换为Utc_date值。*

我在下面尝试了这段代码,但它没有用,因为我无法将上面的字符串转换为基于日期时间(因为它没有秒)。

DateTime date = Convert.ToDateTime(fileDate);
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
fileDate = date.ToString("MM/dd/yyyy hh:mm tt");

上面没有显示FormatException。 你能帮忙吗?

3 个答案:

答案 0 :(得分:2)

首先,我建议使用DateTime.ParseExactTryParseExact - 我不清楚您的样本是在12月2日还是2月12日。指定格式可能会删除FormatException

下一个问题是找出你想要转换它的时区 - 你是说在某个时区里11:58是本地时间,或者已经 em> UTC时间?

  • 如果它是运行此代码的代码的时区中的本地时间,则可以使用DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal作为解析的一部分来执行此操作。
  • 如果已经是世界时,请使用DateTimeStyles.AssumeUniversal
  • 如果是不同时区的当地时间,则需要使用TimeZoneInfo执行转换。

此外,如果是当地时间,您需要考虑两个极端情况(假设您正在使用观察夏令时的时区):

  • 当时钟前进时,由于DST转换,本地时间可能被跳过。因此,如果时钟从早上1点跳到凌晨2点,那么根本不存在凌晨1点30分。
  • 当时钟返回时,由于DST转换,本地时间可能不明确。因此,如果时钟从早上2点回到凌晨1点,那么凌晨1点30分在不同的UTC时间发生两次 - 您对哪种情况感兴趣?

您应该决定如何处理这些案例,并确保在单元测试中涵盖这些案例。

另一种选择是使用我的日期和时间库Noda Time,它更明确地区分“本地日期/时间”和“特定时区的日期/时间”(和其他)的概念。 / p>

答案 1 :(得分:0)

您应该使用DateTime.ParseExact将值传入正确的DateTime实例,然后您可以使用.ToUniversalTime()来获取UTC时间(这将与时间的差异有关)你的服务器机器)

答案 2 :(得分:0)

你可以使用: DateTime.Now.ToUniversalTime();

我不是故意要对你说“DateTime.Now”,但是你得到的结论是,作为DateTime对象的一部分,你有一个方法可以将它转换为通用时间

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx