是否有可能使dateTime.ToString(...)返回不同的时区偏移量?

时间:2014-05-21 17:08:56

标签: .net datetime timezone

我的项目正在使用PDFSharp来规范化pdf中的创建日期。 The issue I'm having is that people in different timezones get different offset values than I do.

问题是PdfSharp允许您设置创建日期,但只接受内部调用它的DateTime

public override string ToString()
{
  string delta = this.dateTime.ToString("zzz").Replace(':', '\'');
  return String.Format("D:{0:yyyyMMddHHmmss}{1}'", this.dateTime, delta);
}

据我所知DateTime没有时区组件,但ToString('zzz')将返回偏移的事实给了我希望。

是否可以控制dateTime.ToString('zzz')返回的内容?

1 个答案:

答案 0 :(得分:2)

不,基本上zzz 总是使用系统默认时区。来自documentation

  

使用DateTime值," zzz"自定义格式说明符表示本地操作系统与UTC的时区的签名偏移量,以小时和分钟为单位。它不反映实例的DateTime.Kind属性的值。出于这个原因," zzz"建议不要将格式说明符与DateTime值一起使用。

所以可以更改系统默认时区,但这非常极端。从根本上说,这听起来像PdfSharp被设计破坏了,你应该提交一个bug。即使只接受DateTimeOffset而不是DateTime,也足以解决此问题。

或者,正如Jay建议的那样,您可以尝试创建一个覆盖您向我们展示的ToString方法的类。我们无法在不知道它是哪个类或者创建它的实例的情况下告诉你如何做到这一点,但这绝对是一个想法。