【问题标题】:Formatting a TimeSpan to look like a time zone offset将 TimeSpan 格式化为看起来像时区偏移
【发布时间】:2013-01-03 10:39:20
【问题描述】:

如何将TimeSpan 对象格式化为时区偏移,如下所示:

+0700

-0600

我正在使用GetUtcOffset 获取偏移量,它的工作原理,但它返回一个 TimeSpan 对象。

【问题讨论】:

    标签: c# timezone timespan


    【解决方案1】:

    如果您使用的是 .Net 4.0 或更高版本,则可以在时间跨度上使用 ToString 方法和 hhmm 说明符(但不确定它是否会显示 + 和 - 符号):

    TimeSpan span = new TimeSpan(7, 0, 0);
    Console.WriteLine(span.ToString("hhmm"));
    

    如果没有,您可以只格式化 HoursMinutes 属性以及一些条件格式以始终显示 + 和 - 符号:

    TimeSpan span = new TimeSpan(7, 0, 0);
    Console.WriteLine("{0:+00;-00}{1:00}", span.Hours, span.Minutes);
    

    TimeSpan 格式字符串参考:http://msdn.microsoft.com/en-gb/library/ee372287.aspx

    数字格式字符串及其条件格式的参考:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

    【讨论】:

    • 但如果TimeSpan 为负数,则会显示类似-1-30 的结果。应该使用Math.Abs(span.Minutes)
    【解决方案2】:

    尝试类似:

    var timespan = new TimeSpan(-5,0,0); // EST
    var offset = String.Format("{0}{1:00}{2:00}",(timespan.Hours >= 0 ? "+" : String.Empty),timespan.Hours,timespan.Minutes);
    

    当数字为非负数时,我添加 +(对于负数,应输出 -)。

    【讨论】:

      【解决方案3】:

      我认为你可以使用这个:

      String.Format("{0:zzz}", ts);
      

      【讨论】:

      • 在小时和分钟之间包含一个 :,可以根据需要进行替换。
      • 这会输出冒号和秒,然后您必须删除它们。
      • 此代码给出运行时错误:“System.FormatException: '输入字符串格式不正确。'
      【解决方案4】:

      这段代码:

      var timeSpan = new TimeSpan(2, 30, 0);
      Console.WriteLine(new DateTimeOffset(2000, 1, 1, 1, 1, 1, timeSpan).ToString("zzz"));
      Console.WriteLine(new DateTimeOffset(2000, 1, 1, 1, 1, 1, -timeSpan).ToString("zzz"));
      

      输出:

      +02:30
      -02:30
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 2020-06-17
        相关资源
        最近更新 更多