首页 文章

将datetime转换为字符串始终默认为系统时区偏移量,需要在结果中获取用户时区偏移量

提问于
浏览
3

我有一个代码,用户输入DateTime和需要转换日期的时区以及结束日期的格式 . 下面是代码 .

代码将DateTime完美转换为用户输入的时区,但在格式化Datetime时,日期时间偏移值始终默认为系统时区偏移量 . 例如,当我将日期2014-10-30T08:01:01-06:00(中央时间)转换为太平洋标准时间并格式化时 . 结果是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);

string FinalFormattedDate = finaloutputtime.toString(outputdateformat);

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");
    
  • 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);
    

相关问题