如何转换特定时区的日期时间?

2023-12-08

我发现很难理解 UTC 的工作原理。

我必须执行以下操作,但我仍然很困惑是否能得到正确的结果。

目标:

  1. 确保数据库中所有保存的日期均为 UTC 格式
  2. 更新默认时区为马尼拉时间
  3. 确保所有返回日期均为马尼拉时间

所以代码是:

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;

现在我对“时区”感到困惑。我不知道如何使用它来实现目标。
希望您理解我的问题并有实现目标的想法。

Edit

根据 @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; }
}

.NET 框架已经具有可用于在不同时区之间转换日期时间的类和方法。看一下 ConvertTime 方法时区信息 class.

Edit:当您有时间将时间放入数据库时​​,假设它是使用正确的时区信息创建的,您可以轻松转换为 UTC:

DateTime utcTime = inputDateTime.ToUniversalTime();

按照问题编辑中的方式获取 timeInfo:

TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey());

当您将数据库时间发送给用户时,使用以下命令将其转换为正确的时区timeInfo.

DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(dbDateTime, timeInfo);

就我个人而言,我会尝试将此逻辑与属性获取/设置方法分开。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何转换特定时区的日期时间? 的相关文章

随机推荐