如何在 NodaTime 中将 Instant 打印为 rfc2822?
How do I print an Instant as rfc2822 in NodaTime?
我想在 NodaTime 中将 Instant 打印为 rfc2822。怎么样?
快速搜索导致损坏的 google 代码链接。我更喜欢内置的命名模式,而不是为 ToString 提供所有格式。
I'd prefer a built-in named pattern over supplying all formatting to ToString.
如果你的意思是你期待 "standard" 模式,可以这么说,没有。
但是,为此编写自定义模式非常容易 - 给你一个 InstantPattern
而不是像你提到的那样将它全部传递到 ToString
。
幸运的是,格式化 RFC 2822 比解析 简单得多 - 特别是如果您乐于用 UTC 表达所有内容。看看 RFC 2822 本身,两件事 spring 出来:
"The date and time-of-day SHOULD express local time." 如果你想这样做,你应该格式化 OffsetDateTime
而不是 Instant
.
星期几是可选的 - 但根据我的经验,它几乎应该存在。
忽略 "should express local time" 部分,我会使用:
var pattern = InstantPattern.CreateWithInvariantCulture
("ddd d MMM yyyy HH:mm:ss '+0000'");
// Test it...
Console.WriteLine(pattern.Format(SystemClock.Instance.Now));
(未来读者请注意:从 Noda Time 2.0 开始,请使用 IClock.GetCurrentInstant()
而不是 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
我想在 NodaTime 中将 Instant 打印为 rfc2822。怎么样?
快速搜索导致损坏的 google 代码链接。我更喜欢内置的命名模式,而不是为 ToString 提供所有格式。
I'd prefer a built-in named pattern over supplying all formatting to ToString.
如果你的意思是你期待 "standard" 模式,可以这么说,没有。
但是,为此编写自定义模式非常容易 - 给你一个 InstantPattern
而不是像你提到的那样将它全部传递到 ToString
。
幸运的是,格式化 RFC 2822 比解析 简单得多 - 特别是如果您乐于用 UTC 表达所有内容。看看 RFC 2822 本身,两件事 spring 出来:
"The date and time-of-day SHOULD express local time." 如果你想这样做,你应该格式化
OffsetDateTime
而不是Instant
.星期几是可选的 - 但根据我的经验,它几乎应该存在。
忽略 "should express local time" 部分,我会使用:
var pattern = InstantPattern.CreateWithInvariantCulture
("ddd d MMM yyyy HH:mm:ss '+0000'");
// Test it...
Console.WriteLine(pattern.Format(SystemClock.Instance.Now));
(未来读者请注意:从 Noda Time 2.0 开始,请使用 IClock.GetCurrentInstant()
而不是 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