我发现很难理解UTC是如何工作的。
我必须执行以下操作,但我仍然对是否能得到正确的结果感到困惑。
目标:
所以代码是:
public ConvertDate(DateTime? dateTime)
{
if (dateTime != null)
{
Value = (DateTime)dateTime;
TimeZone = GetFromConfig.DefaultTimeZone();
}
}
public ConvertDate(DateTime? dateTime, int GMTTimeZone)
{
if (dateTime != null)
{
Value = (DateTime)dateTime;
TimeZone = GMTTimeZone;
}
}
public int TimeZone
{
get { return m_TimeZone; }
set { m_TimeZone = value; }
}
DateTime m_Value;
public DateTime Value
{
get { return m_Value; }
set
{
m_Value = value;
DateTime converted = m_Value.ToUniversalTime().ToLocalTime();
}
}
示例用法:
DateTime SampleInputFromUser = new DateTime(2012, 1, 22);
ConvertDate newConversion = new ConvertDate(SampleInputFromUser, 21);
DateTime answer = newConversion.Value;
现在我把“时区”搞糊涂了。我不知道如何使用它来达到目标。
希望你能理解我的问题,并有完成目标的想法。
编辑
根据@raveturned回答,我得到了以下代码:
*在ConvertDate方法中增加
TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey());
ManilaTime = TimeZoneInfo.ConvertTime(dateTime.Value, TimeZoneInfo.Local, timeInfo).ToUniversalTime();
**新属性
DateTime _ManilaTime;
public DateTime ManilaTime
{
get { return _ManilaTime; }
set { _ManilaTime = value; }
}
发布于 2012-03-26 17:03:04
.NET框架已经提供了在不同时区之间转换DateTimes的类和方法。看一下TimeZoneInfo类的ConvertTime方法。
编辑:当您获得要放入数据库的时间时,假设它是使用正确的时区信息创建的,您可以轻松地将其转换为:
DateTime utcTime = inputDateTime.ToUniversalTime();
按照问题编辑中的操作获取timeInfo:
TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey());
将数据库时间发送给用户时,请使用timeInfo
将其转换为正确的时区。
DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(dbDateTime, timeInfo);
就我个人而言,我会尝试将此逻辑与属性get/set方法分开。
发布于 2017-07-12 01:09:12
TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)");
DateTime thisDate = TimeZoneInfo.ConvertTimeFromUtc(datetimeFromBD, infotime);
发布于 2019-01-23 11:51:30
var date = System.TimeZoneInfo.ConvertTimeFromUtc(
DateTime.UtcNow,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
https://stackoverflow.com/questions/9869051
复制相似问题