你能指导我获得某个特定日期的时间(可以是过去的当前时间)。让我们说用户以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日期和时间。我是怎么做的,我要求管理员用户为每个国家存储时差。当用户输入日期并根据所选国家/地区时,如果用户选择了国家/地区Phillipines,我将其确定为phillipnes日期和时间。然后我添加或减去该时差以获取UTC / GMT日期。我担心的是,如果用户输入过去时间的日期和时间,那么我们如何获得该日期的UTC时间,因为我们只能得到当前的UTC时间。希望我能给你足够的细节。我知道代码,能够谷歌和所有,但我需要很好的方法来做到这一点。我只需要概念就可以了。
答案 0 :(得分:1)
...我从管理界屏幕获取此缩写,其中存储了国家/地区,与UTC / GMT的时差以及时区的缩写...
如果你想支持世界上的大多数人,那还不够。时区不仅仅是UTC的偏移量。在大多数情况下,您不能只询问用户偏移量。请阅读the timezone tag wiki。您需要知道时区是什么。在这种情况下,Windows时区数据库为"Singapore Standard Time"
,IANA数据库为"Asia/Manila"
。
例如,用户输入的日期为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.Parse
或DateTime.ParseExact
。如果您使用Noda Time,请查看their text parsing docs。
答案 1 :(得分:0)
尝试
DateTime utcDateTime = DateTimeVariable.ToUniversalTime();