首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimeZones上的处理时间

TimeZones上的处理时间
EN

Stack Overflow用户
提问于 2017-01-20 14:06:15
回答 3查看 106关注 0票数 0

我试图将此字符串时间值2017-01-10T13:19:00-07:00转换为本地时间(东方)。现在从我的研究中,07:00Mountain Time,它是Eastern Time (我的本地)的两个小时。但是,当我运行这个语法来转换返回的输出时,01/17/2017 10:19:00 AM是3小时差,而不是2。

这是我使用的语法,这是错误的设置吗?为了从协调世界时返回准确的本地时间,我应该改变什么?

代码语言:javascript
复制
static void Main(string[] args)
{
    string green = "2017-01-10T13:19:00-07:00";

    DateTime iKnowThisIsUtc = Convert.ToDateTime(green);
    DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
        iKnowThisIsUtc,
        DateTimeKind.Utc);
    DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();
    Console.WriteLine(localVersion);
    Console.ReadKey();
}

编辑

我已经验证了我的计算机被设置为正确的时区,使用以下语法为两者生成东方(这是正确的)

代码语言:javascript
复制
TimeZone zone = TimeZone.CurrentTimeZone;
string standard = zone.StandardName;
string daylight = zone.DaylightName;
Console.WriteLine(standard);
Console.WriteLine(daylight);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-20 14:26:02

将字符串转换为DateTime对象:

代码语言:javascript
复制
var datetime = DateTime.Parse("2017-01-10T13:19:00-07:00");

获取EST的时区:

代码语言:javascript
复制
var easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

转换为EST (注意转换.ToUniversalTime()):

代码语言:javascript
复制
var easternTime = TimeZoneInfo.ConvertTimeFromUtc(datetime.ToUniversalTime(), easternZone);

easternTime.ToString();输出

2017年01月10日15:19:00

(我在英国,所以你的dd/MM/yyyy,你的可能会有不同的表现)

票数 1
EN

Stack Overflow用户

发布于 2017-01-20 21:50:15

代码语言:javascript
复制
// your input string
string green = "2017-01-10T13:19:00-07:00";

// parse to a DateTimeOffset
DateTimeOffset dto = DateTimeOffset.Parse(green);

// find the time zone that you are interested in.
// note that this one is US Eastern time - inclusive of both EST and EDT, despite the name.
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

// convert the DateTimeOffset to the time zone
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(dto, tzi);

// If you need it, you can get just the DateTime portion.  (Its .Kind will be Unspecified)
DateTime dtEastern = eastern.DateTime;
票数 1
EN

Stack Overflow用户

发布于 2017-01-20 14:28:53

当您的应用程序需要明确地了解时区时,您可能需要考虑使用DateTimeOffset而不是DateTime。

在DateTime、DateTimeOffset、TimeSpan和TimeZoneInfo之间进行选择

这个问题看上去像是有人收集了很多关于拓扑- 夏令时及时区最佳做法的最佳实践。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41765542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档