ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在c#中将字符串偏移量转换为时间跨度

2019-05-29 09:55:50  阅读:354  来源: 互联网

标签:c timezone timespan


我正在尝试将转换时间转换为用户的时区,但我没有Windows时区字符串,例如“太平洋标准时间”.我只有一个字符串偏移量,如“-07:00”.看起来我需要创建一个时间跨度.是手动解析此字符串的唯一方法吗?似乎应该有一种方法来使用字符串偏移来转换时间,但也许我错过了一些东西.

我有这个,但它需要时区.我试图修改它以使用偏移量,但是你可以看到为转换创建的时间跨度,我需要将偏移量设置为时间跨度.

static void Main(string[] args)
{
    var currentTimeInPacificTime = ConvertUtcTimeToTimeZone(DateTime.UtcNow, "Pacific Standard Time");
    //TimeSpan ts = new TimeSpan("-07:00");
    Console.ReadKey();
}

static DateTimeOffset ConvertUtcTimeToTimeZone(DateTime dateTime, string toTimeZoneDesc)
{
    if (dateTime.Kind != DateTimeKind.Utc) throw new Exception("dateTime needs to have Kind property set to Utc");
    TimeSpan toUtcOffset = TimeZoneInfo.FindSystemTimeZoneById(toTimeZoneDesc).GetUtcOffset(dateTime);
    var convertedTime = DateTime.SpecifyKind(dateTime.Add(toUtcOffset), DateTimeKind.Unspecified);
    return new DateTimeOffset(convertedTime, toUtcOffset);
}

解决方法:

您可以使用TimeSpan.Parse方法:

TimeSpan ts = TimeSpan.Parse("-07:00");
Console.WriteLine(ts);   // -07:00:00

或者如果你想要更安全一点,试试TimeSpan.TryParse方法:

TimeSpan ts;
if (TimeSpan.TryParse("-07:00", out ts))
    Console.WriteLine(ts);   // -07:00:00

但是,当然如果你想做的就是将UTC日期/时间转换为本地日期/时间,你可以这样做:

DateTime localDateTime = utcDateTime.ToLocalTime();

或者将其转换为任何时区:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(toTimeZoneDesc);
DateTime localDateTime = TimeZoneInfo.ConvertTime(utcDateTime, tzi);

标签:c,timezone,timespan
来源: https://codeday.me/bug/20190529/1177103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有