首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在特定时区转换DateTime?

如何在特定时区转换DateTime?
EN

Stack Overflow用户
提问于 2012-03-26 16:47:06
回答 4查看 104K关注 0票数 47

我发现很难理解UTC是如何工作的。

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

目标:

  1. 确保数据库中所有保存的日期均采用协调世界时格式
  2. DefaultTimezone is in Manila time
  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;

现在我把“时区”搞糊涂了。我不知道如何使用它来达到目标。

希望你能理解我的问题,并有完成目标的想法。

编辑

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

回答 4

Stack Overflow用户

回答已采纳

发布于 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方法分开。

票数 92
EN

Stack Overflow用户

发布于 2017-07-12 01:09:12

TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)");
DateTime thisDate = TimeZoneInfo.ConvertTimeFromUtc(datetimeFromBD, infotime);
票数 6
EN

Stack Overflow用户

发布于 2019-01-23 11:51:30

var date = System.TimeZoneInfo.ConvertTimeFromUtc(
    DateTime.UtcNow, 
    TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9869051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档