我遇到了TimeZoneInfo.ConvertTime()的C#函数问题 .
我需要得到的是标准时间而不是夏令时,但我只是得到DST有一种方法告诉功能只能在标准时间内获得结果 .
我的当地时区是UTC -6:00中美洲标准时间,所以如果我的时间是中午12:00,我得到的转换是在东部时间下午2点投掷,但我需要它告诉我它是下午1:00 .
public static DateTime TimetoEst( DateTime timenow)
{
var currentTimeZone = TimeZone.CurrentTimeZone.GetUtcOffset(timenow).ToString();
var estzone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var conver = TimeZoneInfo.ConvertTime(timenow, estzone);
return conver;
}
谢谢
1 回答
有几件事:
ID
"Eastern Standard Time"
表示EST和EDT,并具有适当的转换 . 它更适合称为"Eastern Time",但这是Windows时区使用的标识符和约定 .东部时区确实在夏令时期间过渡 . 如果您总是调整到东部标准时间(UTC-5),那么您将忽略该地区的计时现实 - 即夏季月份的东部夏令时(UTC-4) .
您的代码确实将返回EST,但仅适用于DST期间之外的日期值 .
现在,如果您仍然认为这是您想要做的 - 那么您可以在没有
TimeZoneInfo
对象的情况下完成它 . 只需将适用于您的源值的偏移量的结果调整为适用于EST的UTC-5偏移量 .这就是你的要求,但是为了记录 - 我不认为这是最好的计划 . 除了上面的问题 - 假设输入值应该基于本地时区解释不一定是个好主意 - 除非输入时间
DateTimeKind.Utc
为DateTimeKind.Utc
,否则它确实会使用计算机的本地时区 .您确实将变量标记为
timenow
. 如果你刚好在一个DateTime
之后,它代表一个固定偏移量的当前时间,那么就这样得到它会更安全:如果你真的想要在东部时区的当前时间,在适当的时候考虑DST,那么: