2

假设我有 Noda Time LocalDateTime myLocalDateTime 和 Offset myOffset 变量。要生成 ISO8601 格式的 DateTimeOffset 字符串,我使用

var offsetDateTimePattern = OffsetDateTimePattern.Create(OffsetDateTimePattern.ExtendedIsoPattern.PatternText, CultureInfo.InvariantCulture, defaultOffsetDateTime);
var resDateTimeOffsetISO8601 = offsetDateTimePattern.Format(new OffsetDateTime(myLocalDateTime, myOffset));

现在,我还想以当前文化格式的默认值生成 DateTimeOffset 字符串。

对于美国,它就像“2014 年 4 月 10 日下午 3:03:11 -07:00”。我正在考虑将“G”模式与 CurrentCulture 组合用于 DateTime 部分,然后将“m”格式用于 Offset。我该怎么做?像使用“G m”作为模式文本之类的东西?

var offsetDateTimePatternLocal = OffsetDateTimePattern.Create("G m", CultureInfo.CurrentCulture, defaultOffsetDateTime);
var resDateTimeOffsetCurrentCulture = offsetDateTimePattern.Format(new OffsetDateTime(myLocalDateTime, myOffset));

(这里提出了相关的解析问题:http: //goo.gl/OVeQJT

4

1 回答 1

2

我认为如果你想保留"G"格式化程序的文化感知行为,你可以做的最好的事情是这样的:

var ldtPattern = LocalDateTimePattern.CreateWithCurrentCulture("G");
var offsetPattern = OffsetPattern.CreateWithCurrentCulture("m");
var result = ldtPattern.Format(localDateTime) + " " + offsetPattern.Format(resOffset);

问题是OffsetDateTimePattern没有任何文化感知标准模式。 有关详细信息,请参阅用户指南。我认为这可能应该在未来的版本中得到纠正。

如果您想使用固定模式进行格式化,您可以。但是你需要提前知道文化的模式。

var pattern = OffsetDateTimePattern.Create("M/dd/yyyy h:mm:ss tt o<m>", CultureInfo.InvariantCulture, defaultOffsetDateTime);
var result = pattern.Format(new OffsetDateTime(localDateTime, resOffset));
于 2014-04-11T17:44:33.033 回答