0

您能指导我获取给定日期的 UTC 时间(可以是过去时间,也可以是当前时间)。假设用户以 12-AUG-2013 17:10 PHT 的格式输入日期。是否可以获得该给定日期的UTC时间?我正在为我的项目使用 asp.net 和 c# 3.5 和 sql server 2008。请建议我实现此选项的方法。请让我们知道有关我的查询的更多信息。谢谢

PHT 不是输入字符串的一部分,但我附加它以显示其 Phillines 时区。但是我从管理屏幕中获得了这个缩写,其中存储了国家、与 UTC/GMT 的时差和时区的缩写。

我会详细说明我的要求。用户输入他/她当地时区的日期。此日期可以是过去的日期或当前日期。例如,用户输入日期 12-AUG-2013 17:10,这是菲律宾的日期和时间(假设)。我希望将此日期转换为 UTC/GMT 日期和时间。我是怎么做的,我要求管理员用户存储每个国家的时差。当用户输入日期并根据所选国家/地区时,如果用户选择了国家/地区菲律宾,我将其确定为 phillipnes 日期和时间。然后我添加或减去该时差以获得 UTC/GMT 日期。我担心的是如果用户输入过去时间的日期和时间,那么我们如何才能获得该日期的 UTC 时间,因为我们只能获得当前的 UTC 时间。希望我能给你足够的细节。我知道代码并且能够谷歌,但我需要好的方法来做到这一点。我只需要概念来做到这一点。

4

2 回答 2

1

...我从管理屏幕中获取此缩写,其中存储了国家/地区、与 UTC/GMT 的时差和时区的缩写...

如果你试图支持世界上的大多数人,那是不够的。时区不仅仅是与 UTC 的偏移量。在大多数情况下,您不能只向用户询问偏移量。请阅读时区标签 wiki。您需要知道时区是什么。在这种情况下,它要么"Singapore Standard Time"用于 Windows 时区数据库,要么"Asia/Manila"用于 IANA 数据库。

例如,用户输入日期 12-AUG-2013 17:10,这是菲律宾的日期和时间(假设)。我希望将此日期转换为 UTC/GMT 日期和时间。

以下是使用 C# 转换 Windows 时区的方法:

DateTime local = new DateTime(2013, 8, 12, 17, 10, 0);
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time");
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(local, tz);

以下是如何使用 IANA 数据库通过Noda Time库进行转换:

LocalDateTime local = new LocalDateTime(2013, 8, 12, 17, 10, 0);
DateTimeZone tz = DateTimeZoneProviders.Tzdb["Asia/Manila"];
ZonedDateTime zdt = local.InZoneLeniently(tz);
Instant utcinstant = zdt.ToInstant(); // for a NodaTime instant
DateTime utcdt = zdt.ToDateTimeUtc(); // for a regular UTC DateTime

我跳过了您以字符串开头的事实,因为您的问题更侧重于 UTC 和时区问题。如果您需要这方面的帮助,请查看DateTime.ParseDateTime.ParseExact。如果您选择 Noda Time,请查看他们的文本解析文档

于 2013-08-28T13:45:54.317 回答
0

试试看

 DateTime utcDateTime = DateTimeVariable.ToUniversalTime();
于 2013-08-27T10:26:46.927 回答