如何在默认文化格式中从Noda Time OffsetDateTime生成DateTimeOffset字符串?
-
21-12-2019 - |
题
假设我有noda time localDateTime myLocalDateTime并偏移MyOffset变量。在ISO8601格式中生成DateTimeOffset字符串,我使用
var offsetDateTimePattern = OffsetDateTimePattern.Create(OffsetDateTimePattern.ExtendedIsoPattern.PatternText, CultureInfo.InvariantCulture, defaultOffsetDateTime);
var resDateTimeOffsetISO8601 = offsetDateTimePattern.Format(new OffsetDateTime(myLocalDateTime, myOffset));
.
现在,我还希望在默认文化格式中生成DateTimeOffset字符串。
为美国它就像“4/10/2014 3:03:11 PM -07:00”。我正在考虑使用“g”模式的组合,其中具有日期时间的CurrentCulture部分,后跟偏移量“M”格式。我该怎么做?类似于使用“g m”作为模式文本?
var offsetDateTimePatternLocal = OffsetDateTimePattern.Create("G m", CultureInfo.CurrentCulture, defaultOffsetDateTime);
var resDateTimeOffsetCurrentCulture = offsetDateTimePattern.Format(new OffsetDateTime(myLocalDateTime, myOffset));
.
(此处有关解析问题: http://go.gl/oveqjt
解决方案
我认为如果你想保留的文化感知行为,你可以做最好的,你可以做的,所以formationd的文化感知行为是这样的:
var ldtPattern = LocalDateTimePattern.CreateWithCurrentCulture("G");
var offsetPattern = OffsetPattern.CreateWithCurrentCulture("m");
var result = ldtPattern.Format(localDateTime) + " " + offsetPattern.Format(resOffset);
.
问题是,生成的icetagcode没有任何文化感知的标准模式。有关详细信息的用户指南。我认为这应该在将来的版本中纠正。
如果要使用固定模式格式化,可以。但是,你需要提前了解文化的模式。
var pattern = OffsetDateTimePattern.Create("M/dd/yyyy h:mm:ss tt o<m>", CultureInfo.InvariantCulture, defaultOffsetDateTime);
var result = pattern.Format(new OffsetDateTime(localDateTime, resOffset));
. 不隶属于 StackOverflow