C#DateTime在不同的TimeZones中从字符串转换为DateTime

时间:2017-07-26 08:10:52

标签: c# datetime timezone

我正在努力解决问题。我有一个字符串日期," 2015-05-02 01:00:00",从数据库中提取。

我知道这是英国时间,但我的当地时间是比利时时间。 我试图将日期存储在UTC和(CEST或CET取决于季节),将其从英国时间提取出来。

我尝试将Kind属性设置为英国时间,但结果似乎是在本地或utc时间。所以,我可以做一半的工作,但不能完成剩下的工作(例如我仍然需要CEST / CET时间)。

我试着用这个:

string dateString = (string) line["stringDate"];

DateTime ukTime = DateTime.Parse(dateString, new CultureInfo("en-GB", false));
DateTime belgianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ukTime, "Romance Standard Time");

ukTime和belgianTime的结果相同:2015-05-02 01:00:00,种类=未指定。

belgianTime应该是2015-05-02 02:00:00

3 个答案:

答案 0 :(得分:1)

如果您只是将源时区添加到转化方法,它会提供所需的答案,即使不指定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

答案 1 :(得分:0)

使用以下代码行。

echo "The HTML page title is: ...";

答案 2 :(得分:0)

您必须使用ConvertTime方法。 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"));