解析/格式化日期时间时如何控制':'在时区偏移中的出现

问题描述 投票:12回答:4

我正在使用一种协议,当指定日期时间信息时,该协议可能会包括时区偏移量。我的代码是用C#编写的,我们正在使用4.0 .NET运行时。我看到在解析和格式化时有一个formatting option "zzz"用于包含时区信息,但是,冒号(:)似乎是固定的。例如,使用自定义格式字符串(yyyyMMddHHmmsszzz)格式化的Datetime可能显示为:

20100309101530-05:00

我正在使用的协议在时区偏移量中不包含冒号。该协议将格式化日期时间,并期望将其格式化为:

20100309101530-0500

使用包含时区偏移的自定义格式器解析或格式化日期时间时,是否有一种方法可以控制冒号的外观?

.net datetime timezone
4个回答
10
投票

看起来好像没有内置的东西(您可以使用zz,但是省去了几分钟的时间。]

您可以通过实例化一个DateTimeFormatInfo,将DateTimeFormatInfo设置为TimeSeparator,并在调用string.Empty时将其用作IFormatProvider,来滚动自己的电话(如果尚未调用,则使之明确)。] >

但是坦率地说,使用DateTime.ToString从默认返回值中删除不需要的Replace非常容易。


6
投票

我遇到了同样的问题,最终使用扩展名


2
投票

[如果您在无用替换或扩展的地方使用它(例如,当传递为:时可能想要用冒号输出为 public static class DateTimeExtensions { public static String ToSomeFormat(this DateTimeOffset dateTime) { return dateTime.ToString("yyyyMMddHHmmsszzz").Replace(":", ""); } } 的内容),而分钟数可以用-05:00伪造它。


0
投票

我有完全相同的zz00,试图以var date = new DateTimeOffset(2008, 8, 1, 0, 0, 0, new TimeSpan(-5, 0, 0)); Console.WriteLine(date.ToString("yyyy-MM-dd-HH:mm:ss(zz00)")); // outputs 2008-08-01-00:00:00(-0500) 之类的格式格式化/解析时区。

© www.soinside.com 2019 - 2024. All rights reserved.