C#从字符串读取时区并转换为本地

时间:2010-07-30 21:40:56

标签: c# timezone dynamics-crm

我看起来和看起来似乎无法想出完美的解决方案。因此,由于堆栈溢出是完美的,这将解决我的问题。

我从服务器获得System.String个日期时间(如果您愿意,可以使用Microsoft CRM)。它们是SQL格式(“2010-07-23T17:14:40-04:00”)。我希望在保留时区信息的.net System.DateTime类型中读取它,然后将其转换为本地时间。这个过程发生在各个时区,我无法保持同步。基本上,我从CRM服务器获得了大量的CRM记录(这似乎用这个巴西时间标记所有时区(-4)),我想在我的配置文件中写下我看到的最新记录(所以我没有回去拿起我已经拥有的价值观。不过,我想在当地时间写下来。这是一个蒸馏

我想取字符串“2010-07-23T17:14:40-04:00”并运行一些代码:

System.Datetime Get_Local_DT(string val);

将在中部时间(-6)返回“2010-07-23 15:14:40”,在东部时间(-5)返回“2010-07-23 16:14:40”。让我知道你的想法。

5 个答案:

答案 0 :(得分:1)

您的时间加盖巴西时间的原因是附加到执行查询的用户的时区。 CRM在数据库中存储通用,过滤后的视图根据当前用户生成该字符串。这样,无论何时在CRM中打开记录,您都会得到一个包含时区的日期。

如果您所做的只是保存日期/时间以便稍后检查,我同意将其存储为UTC并进行UTC比较。

请注意,如果您使用的是任何ToLocalTime方法,则表示服务器上的本地时间 而不是实际用户本地时间(除非它们与服务器位于同一时区)。我想这对你来说有多重要取决于你支持多少个时区(1个或多个)以及服务器所在的位置。

答案 1 :(得分:0)

???

 private DateTime Get_Local_DT(string strTimestamp, int iUTCOffset)
    {
        DateTime _dt = DateTime.MinValue;
        try
        {
            DateTime dt = DateTime.Parse(strTimestamp);
            DateTime _returnDateTime = dt.ToUniversalTime().AddHours(iUTCOffset);
            return _returnDateTime;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        return _dt;
    }

答案 2 :(得分:0)

我认为您应该使用System.DateTimeOffset类型来解决您的问题。

String d = "2010-07-23T17:14:40-04:00";
DateTimeOffset dt = DateTimeOffset.Parse(d);
Console.WriteLine(dt.LocalDateTime + " " + dt.ToOffset(TimeSpan.FromHours(-2)));

答案 3 :(得分:0)

您可以使用

将字符串解析为DateTime对象
string sqlDate = "2010-07-23T17:14:40-04:00";

DateTime dt = DateTime.Parse(sqlDate);

接下来,您可以使用以下语句对其进行格式化:

dt.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);

我试过这段代码:

void Main()
{
    string sqlDate = "2010-07-23T17:14:40-04:00";

    DateTime dt = DateTime.Parse(sqlDate);

    Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo));
}

输出:2010-07-24 02:44:40

我在IST。我希望这会有所帮助。

答案 4 :(得分:0)

将它们保存为通用时间:

   DateTime t = DateTime.Parse(str);
   t.ToUniversalTime(); // save this

然后将保存的时间显示为本地:

   DateTime t = DateTime.Parse(str);
   t.ToLocalTime(); // show this

始终使用通用时间,将本地视为mvc中的视图。