Как создать строку DateTimeOffset из Noda Time OffsetDateTime по умолчанию для текущего формата культуры?

StackOverflow https://stackoverflow.com//questions/23019131

Вопрос

Предположим, у меня есть переменные Noda Time LocalDateTime myLocalDateTime и Offset myOffset.Чтобы создать строку DateTimeOffset в формате ISO8601, я использую

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

Теперь я также хочу создать строку DateTimeOffset по умолчанию для текущего формата культуры.

Для США это будет выглядеть так: «10.04.2014 15:03:11 -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)

Это было полезно?

Решение

Я думаю, лучшее, что вы могли бы сделать, если хотите сохранить культурно-ориентированное поведение людей. "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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top