我发现很难理解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();
}
}
Run Code Online (Sandbox Code Playgroud)
样品用法:
DateTime SampleInputFromUser = new DateTime(2012, 1, 22);
ConvertDate newConversion = new ConvertDate(SampleInputFromUser, 21);
DateTime answer = newConversion.Value;
Run Code Online (Sandbox Code Playgroud)
现在我对'TimeZone'感到困惑.我不知道如何使用它来实现目标.
希望您理解我的问题,并有想法完成目标.
编辑
根据@raveturned的回答,我得到以下代码:
***在ConvertDate方法中添加
TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey());
ManilaTime = TimeZoneInfo.ConvertTime(dateTime.Value, TimeZoneInfo.Local, timeInfo).ToUniversalTime();
Run Code Online (Sandbox Code Playgroud)
**新物业
DateTime _ManilaTime;
public DateTime ManilaTime
{
get { return _ManilaTime; }
set { _ManilaTime = value; }
}
Run Code Online (Sandbox Code Playgroud)
rav*_*ned 65
.NET框架已经具有可用于在不同时区之间转换DateTime的类和方法.看看TimeZoneInfo类的ConvertTime方法.
编辑:当您有时间放入数据库时,假设它是使用正确的时区信息创建的,您可以轻松转换为UTC:
DateTime utcTime = inputDateTime.ToUniversalTime();
Run Code Online (Sandbox Code Playgroud)
在问题编辑中获取timeInfo:
TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey());
Run Code Online (Sandbox Code Playgroud)
将数据库时间发送给用户时,请使用将其转换为正确的时区timeInfo.
DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(dbDateTime, timeInfo);
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会尝试将此逻辑与有利的get/set方法分开.
var date = System.TimeZoneInfo.ConvertTimeFromUtc(
DateTime.UtcNow,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
Run Code Online (Sandbox Code Playgroud)
TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)");
DateTime thisDate = TimeZoneInfo.ConvertTimeFromUtc(datetimeFromBD, infotime);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71268 次 |
| 最近记录: |