C#从字符串读取时区并转换为本地
我看了又看,似乎找不出完美的解决方案。因此,由于堆栈溢出是完美的,这将解决我的问题 我正在从服务器上获取C#从字符串读取时区并转换为本地,c#,timezone,dynamics-crm,C#,Timezone,Dynamics Crm,我看了又看,似乎找不出完美的解决方案。因此,由于堆栈溢出是完美的,这将解决我的问题 我正在从服务器上获取System.Stringdatetimes(如果您愿意,可以使用Microsoft CRM)。它们是SQL格式的(“2010-07-23T17:14:40-04:00”)。我想以.netSystem.DateTime的形式读取它,并保留时区信息,然后将其转换为本地时间。这个过程发生在不同的时区,我很难保持同步。基本上,我从CRM服务器上获得了很多CRM记录(似乎所有的时区都有巴西时间(-4)
System.String
datetimes(如果您愿意,可以使用Microsoft CRM)。它们是SQL格式的(“2010-07-23T17:14:40-04:00
”)。我想以.netSystem.DateTime
的形式读取它,并保留时区信息,然后将其转换为本地时间。这个过程发生在不同的时区,我很难保持同步。基本上,我从CRM服务器上获得了很多CRM记录(似乎所有的时区都有巴西时间(-4)),我想在我的配置文件中写下我看到的最新记录(所以我不会返回并获取我已经拥有的值)。不过我想在当地时间写下来。这是蒸馏水
我想获取字符串“2010-07-23T17:14:40-04:00
”,然后运行一些代码:
System.Datetime Get_Local_DT(string val);
这将在中部时间(-6)返回“2010-07-2315:14:40”,在东部时间(-5)返回“2010-07-2316:14:40”。让我知道你的想法
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;
}
我认为您应该使用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)));
您可以使用
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-2402:44:40
我现在在家。我希望这有帮助。将它们另存为世界时:
DateTime t = DateTime.Parse(str);
t.ToUniversalTime(); // save this
然后将保存的时间显示为本地时间:
DateTime t = DateTime.Parse(str);
t.ToLocalTime(); // show this
始终使用通用时间,将本地视为mvc中的一个视图。您的时间上印有巴西时间的原因是,它是附加到执行查询的用户的时区。CRM将universal存储在数据库中,过滤视图根据当前用户生成该字符串。这样,每当你在CRM中打开一个记录,你就会得到一个日期,上面有你所在时区的时间
如果您所做的只是保存日期/时间,以便稍后检查,我同意将其存储为UTC并进行UTC比较
请注意,如果使用任何ToLocalTime方法,则在服务器上显示的是本地时间,而不是实际用户的本地时间(除非他们与服务器位于同一时区)。我想这对您来说有多重要取决于您支持多少时区(1个或多个)以及您的服务器所在的位置。Randster发布的代码运行良好。但是,它可能需要相应地格式化日期,即yyyy-MM-dd HH:MM:ssI不认为这是正确的。它将str
视为本地时间,然后将其转换为通用时间(用于保存),对吗?我从-04:00
时区中得到一个字符串
,我需要将其转换为通用时区。我不认为这是执行查询的用户(印第安纳州东部时间的我)的时区。