繁体   English   中英

如何使用asp.net和C#或SQL Server获取过去日期的UTC时间

[英]how to get UTC time of a past date using asp.net and c# or sql server

您能指导我获取给定日期的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日期和时间。 我是怎么做的,我要求管理员用户存储每个国家/地区的时差。 当用户输入日期并基于所选国家/地区时,如果用户选择了菲律宾国家/地区,我会将其确定为菲律宾语日期和时间。然后我添加或减去该时间差以获得UTC / GMT日期。 我担心的是,如果用户输入过去时间的日期和时间,那么我们如何获取该日期的UTC时间,因为我们只能获取当前的UTC时间。 希望我能给你足够的细节。 我知道代码,能够使用Google和其他工具,但是我需要良好的方法来做到这一点。 我只需要概念就能做到。

...我从管理员屏幕上获得了此缩写,该国家/地区,与UTC / GMT的时差和时区的缩写被存储...

如果您要支持全世界的大部分地区,那还远远不够。 时区不仅仅是UTC的偏移量。 在大多数情况下,您不能仅向用户询问偏移量。 请阅读时区标签Wiki 您需要知道时区是什么。 在这种情况下,Windows时区数据库为"Singapore Standard Time" "Asia/Manila" ,而IANA数据库为"Asia/Manila"

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

这是在Windows时区中使用C#进行转换的方法:

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

这是您可以通过Noda Time库使用IANA数据库进行转换的方法:

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,请查看他们的文本解析文档

尝试为

 DateTime utcDateTime = DateTimeVariable.ToUniversalTime();

暂无
暂无

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

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