2014-04-11 25 views
2

假設我有Noda Time LocalDateTime myLocalDateTime和Offset myOffset變量。爲了產生ISO8601格式的字符串的DateTimeOffset我用如何從Noda Time OffsetDateTime生成當前文化格式默認的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組合用於DateTime部分,後跟「m」格式用於偏移。我會怎麼做?就像使用「G m」作爲模式文本一樣?

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

(相關解析問題在這裏問:http://goo.gl/OVeQJT

回答

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)); 
+0

相關:https://code.google.com/p/noda-time/issues/detail?id=267 –

+0

太好了,我居然想到的正是努力! – vkelman

+0

爲此創建的新問題:https://code.google.com/p/noda-time/issues/detail?id=276 –

相關問題