Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UTC日期时间转换为美国东部时间_C#_.net_Datetime_Timezone - Fatal编程技术网

C# UTC日期时间转换为美国东部时间

C# UTC日期时间转换为美国东部时间,c#,.net,datetime,timezone,C#,.net,Datetime,Timezone,我对UTC感到困惑,在任何地方都找不到任何东西 我的格林尼治时间是00:00:00 我想把它转换成美国东部标准时间的UTC时间 我得到04:00:00-04作为UTC字符串 这是我的密码 string UTCDateTime; TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time") DateTime dateTimeOld = new DateTime(2017,09,11,0

我对UTC感到困惑,在任何地方都找不到任何东西

我的格林尼治时间是00:00:00

我想把它转换成美国东部标准时间的UTC时间

我得到04:00:00-04作为UTC字符串

这是我的密码

string UTCDateTime;
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")
DateTime dateTimeOld = new DateTime(2017,09,11,0,0,0);
DateTime dateTime = TimeZoneInfo.ConvertTimeToUtc(dateTimeOld, timeZone);

UTCDateTime = dateTime.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss");

var offset = timeZone.GetUtcOffset(dateTime);

UTCDateTime += ((offset < TimeSpan.Zero) ? "-" : "+") + offset.ToString("hh");'
字符串UTCDateTime;
TimeZoneInfo时区=TimeZoneInfo.FindSystemTimeZoneById(“美国东部标准时间”)
DateTime dateTimeOld=新的日期时间(2017,09,11,0,0,0);
DateTime DateTime=TimeZoneInfo.ConvertTimeToUtc(dateTimeOld,时区);
UTCDateTime=dateTime.ToUniversalTime().ToString(“yyyy-MM-dd-HH:MM:ss”);
var offset=时区.GetUtcOffset(日期时间);
UTCDateTime+=((偏移量
因此,我的输出将是UTC字符串:“2017-09-11 04:00:00-04”


对吗?是不是应该是“2017-09-11 00:00:00-04”

你的约会时间是美国东部时间午夜

然后使用时区将其转换为UTC,并输入dateTime

由于UTC比EST早4小时,这意味着DateTimeKind.UTC的dateTime现在是04:00

然后在分配中将其再次转换为UTCDateTime。但是,由于它已经是UTC(来自您以前的转换),所以这没有任何作用。因此,它将2017-09-11 04:00:00放入字符串UTCDateTime

然后从时区信息中添加时区偏移量-这毫无意义。 时区与本地时间(dateTimeOld)相关联。通过转换为UTC,您可以消除时区偏移

因此,从dateTimeOld初始化字符串并添加时区偏移量-这将给出: 2017-09-11 00:00:00-04

或者直接使用dateTime中的UTC时间加上“Z”后缀来表示UTC(祖鲁时间),因此 2017-09-11 04:00:00Z

这两个都表示同一时间(除非我复制粘贴了错误的内容):)


通常,在处理日期时,常见的惯例是尽快将数据转换为UTC,并在整个计划中保持UTC,然后在显示数据时转换为本地时间。但您也可以选择使用DateTimeOffset,它可以不同于DateTime,跨多个时区存储本地时间。

您的dateTimeOld是EST中的午夜

然后使用时区将其转换为UTC,并输入dateTime

由于UTC比EST早4小时,这意味着DateTimeKind.UTC的dateTime现在是04:00

然后在分配中将其再次转换为UTCDateTime。但是,由于它已经是UTC(来自您以前的转换),所以这没有任何作用。因此,它将2017-09-11 04:00:00放入字符串UTCDateTime

然后从时区信息中添加时区偏移量-这毫无意义。 时区与本地时间(dateTimeOld)相关联。通过转换为UTC,您可以消除时区偏移

因此,从dateTimeOld初始化字符串并添加时区偏移量-这将给出: 2017-09-11 00:00:00-04

或者直接使用dateTime中的UTC时间加上“Z”后缀来表示UTC(祖鲁时间),因此 2017-09-11 04:00:00Z

这两个都表示同一时间(除非我复制粘贴了错误的内容):)


通常,在处理日期时,常见的惯例是尽快将数据转换为UTC,并在整个计划中保持UTC,然后在显示数据时转换为本地时间。但是您也可以选择使用DateTimeOffset—它可以与DateTime不同,跨多个时区存储本地时间。

使用
DateTimeOffset可以更好地处理此用例

// The source time in UTC
DateTimeOffset utc = new DateTimeOffset(2017, 9, 11, 0, 0, 0, TimeSpan.Zero);

// The time zone for the Eastern US
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

// The converted time in the time zone
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(utc, timeZone);

// output in a usable format
Console.WriteLine(eastern.ToString("yyyy-MM-dd HH:mm:ss zzz"));

//=>  2017-09-10 20:00:00 -04:00
请注意:

  • 在此上下文中,GMT和UTC的含义相同。说你有格林尼治标准时间,你想要UTC是荒谬的。如果您指的是特定格式的字符串,请描述该格式。UTC不是字符串格式

  • “美国东部标准时间”
    条目只能在印第安纳州的某些地区使用。美国东部时区的大部分由
    “东部标准时间”
    条目表示。如果您感兴趣,请参阅以了解更多详细信息

  • 不要假设所有时区都只有小时偏移量。许多时间也被30或45分钟所抵消。如果使用任何时区,仅显示小时数可能会导致数据错误

  • 除非源数据确实位于计算机的本地时区,否则不要调用
    ToUniversalTime

  • 注意输出。您的代码和假设都不正确。美国东部落后UTC四小时。因此,如果是UTC午夜,则是美国东部时间前一天的20:00(或晚上8:00)


使用
DateTimeOffset
可以更好地处理此用例

// The source time in UTC
DateTimeOffset utc = new DateTimeOffset(2017, 9, 11, 0, 0, 0, TimeSpan.Zero);

// The time zone for the Eastern US
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

// The converted time in the time zone
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(utc, timeZone);

// output in a usable format
Console.WriteLine(eastern.ToString("yyyy-MM-dd HH:mm:ss zzz"));

//=>  2017-09-10 20:00:00 -04:00
请注意:

  • 在此上下文中,GMT和UTC的含义相同。说你有格林尼治标准时间,你想要UTC是荒谬的。如果您指的是特定格式的字符串,请描述该格式。UTC不是字符串格式

  • “美国东部标准时间”
    条目只能在印第安纳州的某些地区使用。美国东部时区的大部分由
    “东部标准时间”
    条目表示。如果您感兴趣,请参阅以了解更多详细信息

  • 不要假设所有时区都只有小时偏移量。许多时间也被30或45分钟所抵消。如果使用任何时区,仅显示小时数可能会导致数据错误

  • 除非源数据确实位于计算机的本地时区,否则不要调用
    ToUniversalTime

  • 注意输出。您的代码和假设都不正确。美国东部落后UTC四小时。因此,如果是UTC午夜,则是美国东部时间前一天的20:00(或晚上8:00)


你的问题令人困惑。你了解UTC、GMT和EST之间的区别吗?有大量关于时区的文档可用,我保证。UTC