如何从Noda Time OffsetDateTime生成DateTimeOffset字符串,默认为当前的文化格式?

时间:2014-04-11 17:36:38

标签: c# datetime datetime-format nodatime

假设我有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));

现在,我还希望在当前文化格式的默认值中为a生成DateTimeOffset字符串。

对于美国来说,这就像“2014年4月10日3:03:11 PM -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

1 个答案:

答案 0 :(得分:2)

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

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

问题是OffsetDateTimePattern没有任何文化感知标准模式。 See the user guide for details。我认为这应该在将来的版本中得到纠正。

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

var pattern = OffsetDateTimePattern.Create("M/dd/yyyy h:mm:ss tt o<m>", CultureInfo.InvariantCulture, defaultOffsetDateTime);
var result = pattern.Format(new OffsetDateTime(localDateTime, resOffset));