C#DateTime在不同时区中从字符串转换为DateTime
我正在与一个问题作斗争。我有一个字符串日期,看起来像这样,“2015-05-02 01:00:00”,从数据库中提取 我知道现在是英国时间,但我的当地时间是比利时时间。 我试图将日期存储在UTC和(CEST或CET取决于季节)中,并将其从我提取的英国时间转换过来 我试图将Kind属性设置为英国时间,但结果似乎是本地时间或utc时间。因此,我可以完成一半的工作,但不能完成其余的工作(例如,我仍然需要CEST/CET时间) 我试着用这个:C#DateTime在不同时区中从字符串转换为DateTime,c#,datetime,timezone,C#,Datetime,Timezone,我正在与一个问题作斗争。我有一个字符串日期,看起来像这样,“2015-05-02 01:00:00”,从数据库中提取 我知道现在是英国时间,但我的当地时间是比利时时间。 我试图将日期存储在UTC和(CEST或CET取决于季节)中,并将其从我提取的英国时间转换过来 我试图将Kind属性设置为英国时间,但结果似乎是本地时间或utc时间。因此,我可以完成一半的工作,但不能完成其余的工作(例如,我仍然需要CEST/CET时间) 我试着用这个: string dateString = (string) l
string dateString = (string) line["stringDate"];
DateTime ukTime = DateTime.Parse(dateString, new CultureInfo("en-GB", false));
DateTime belgianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ukTime, "Romance Standard Time");
英国时间和比利时时间的结果相同:2015-05-02 01:00:00,种类=未指定
比利时时间应为2015-05-02 02:00:00使用以下代码行
var time = DateTime.Parse(DateTime.Now.ToString());
var clientZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
var utcTime = TimeZoneInfo.ConvertTimeToUtc(time, clientZone);
您必须使用
ConvertTime
方法
快速样本-
string s = "2015-05-02 01:00:00";
var dt = new DateTime(2015, 05, 02, 1, 0, 0);
var t = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"),
TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
如果您只是将源时区添加到转换方法中,它会给出所需的答案,即使没有指定
IFormatProvider
string dateString = (string) line["stringDate"];
DateTime ukTime = DateTime.Parse(dateString);
DateTime belgianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ukTime,
"GMT Standard Time",
"Romance Standard Time");
这就给了时间Kind==Unspecified
。但是,如果您使用:
var belgianTime = TimeZoneInfo.ConvertTime(ukTime,
TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"),
TimeZoneInfo.Local);
对于转换,您将得到
Kind==Local
等待Jon Skeet出现,建议使用Joda:-)您是否尝试过ukTime.ToLocalTime()
?我在belgianTime
:2015/5/2 3:00:00
中尝试过这一结果。如果我使用ToLocalTime
它的结果与ukTime
@derape的结果相同,那么C#的结果不是很好吗?乔达不是爪哇人吗?@DannyGoodall啊,没错!我搞混了