我有字符串(变量是 fileDate),日期值采用以下格式:

2011/2/12 11:58 上午

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

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

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

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

有帮助吗?

解决方案

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

下一个问题是确定您想要将其转换为哪个时区 - 您是说 11:58 是一个 当地的 某个时区的时间,或者是 已经 UTC 时间?

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

另外,如果是当地时间,您需要考虑两个极端情况(假设您使用的时区遵守夏令时):

  • 当地时间可能是 跳过 由于 DST 转换,时钟向前推进。因此,如果时钟从凌晨 1 点跳到凌晨 2 点,那么凌晨 1:30 根本就不存在。
  • 当地时间可能是 模糊的 由于 DST 转换,当时钟返回时。因此,如果时钟从凌晨 2 点拨回到凌晨 1 点,那么就会出现凌晨 1:30 两次 在不同的 UTC 时间 - 您对哪个事件感兴趣?

您应该决定如何处理这些情况,并确保它们包含在单元测试中。

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

其他提示

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

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

我不是故意对你说的应该使用“datetime.now”,但是你得到了作为DateTime对象的一部分的指向,你有一个方法将其转换为通用时间

http://msdn.microsoft.com/zh-US / Library / System.datetime.tounivesaltime.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top