如何在NodaTime中打印一个Instant作为rfc2822?

时间:2015-04-03 10:35:31

标签: nodatime

我希望在NodaTime中将一个Instant打印为rfc2822。怎么样?

快速搜索会导致谷歌代码链接中断。我更喜欢内置的命名模式而不是向ToString提供所有格式。

1 个答案:

答案 0 :(得分:3)

  

我更喜欢内置的命名模式而不是向ToString提供所有格式。

如果你的意思是你期待一种“标准”模式可以这么说,那就没有了。

但是,为此编写自定义模式很容易 - 如您所述,为InstantPattern提供ToString而不是将其全部传递到OffsetDateTime

幸运的是,格式化 RFC 2822比解析简单得多 - 特别是如果您乐意用UTC表达所有内容。看看RFC 2822本身,有两件事情出现了:

  • “日期和时间应该表达当地时间。”如果您想这样做,则应格式化Instant而不是var pattern = InstantPattern.CreateWithInvariantCulture ("ddd d MMM yyyy HH:mm:ss '+0000'"); // Test it... Console.WriteLine(pattern.Format(SystemClock.Instance.Now));

  • 星期几是可选的 - 但根据我的经验,它几乎可以在那里。

忽略“应该表达当地时间”部分,我会使用:

IClock.GetCurrentInstant()

(未来读者注意:自Noda Time 2.0起,请使用IClock.Now代替Sat 4 Apr 2015 09:55:49 +0000 。)

示例输出:

OffsetDateTimePattern

如果您想沿着var pattern = OffsetDateTimePattern.CreateWithInvariantCulture ("ddd d MMM yyyy HH:mm:ss o<+HHmm>"); 路线前进,则需要:

Sat 4 Apr 2015 10:57:27 +0100

然后你会得到如下输出:

{{1}}