3

我有一个代码,用户在其中输入 DateTime 和需要将日期转换为的时区以及结束日期应采用的格式。下面是代码。

该代码将 DateTime 完美地转换为用户输入的时区,但是在格式化 Datetime 时,日期时间偏移值始终默认为系统时区偏移。例如,当我将 Date 2014-10-30T08:01:01-06:00(central time) 转换为太平洋标准时间并对其进行格式化时。结果是 2014-10-30T06:01:01**-06:00** ,应该是 2014-10-30T01:01:01**-08:00** 偏移值默认为系统时区这是中央时间。

    DateTime inputtime;
    string TimezoneID;
    String outputdateformat;
inputtime = "2014-10-30T08:01:01-05:00"
TimezoneID ="Pacific Standard Time".
Outputdateformat ="yyyy-MM-ddThh:mm:ss zz"

DateTime finaloutputtime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(inputtime,TimezoneID);

字符串 FinalFormattedDate =finaloutputtime.toString(outputdateformat);

4

2 回答 2

1

您可以使用DateTimeOffset而不是DateTime处理此问题:

            DateTimeOffset time = DateTime.Now;
            string timezoneID = "Pacific Standard Time";
            TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById(timezoneID);

            DateTimeOffset newTIme = TimeZoneInfo.ConvertTime(time, info);


            string timeformat = newTIme.ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz");
            string oldtimeformat = time.ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz");
于 2015-04-29T16:22:32.753 回答
0

如果要将 DateTimeOffset 转换为另一个 DateTimeOffset,可以在 TimeZoneInfo 中使用专用函数

DateTimeOffset newTime = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));

或者你可以这样做

DateTime utc = new DateTime(2014, 6, 4, 12, 34, 0);


TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard   Time");

// it's a simple one-liner
DateTime pacific = TimeZoneInfo.ConvertTimeFromUtc(utc, tzi);
于 2015-04-29T16:49:22.057 回答