Как я могу преобразовать DateTime в строку с дробными секундами, которая локализована?

У меня есть объект DateTime, и я хочу вывести часы, минуты, секунды и доли секунды в виде строки, локализованной для текущего языка и региональных параметров.

Здесь есть две проблемы.

Первая проблема заключается в том, что не существует стандартного формата DateTime, в котором будут отображаться доли секунды. По сути, я хочу знать, как получить долгое времяформат DateTime, но с дробными секундами.

Конечно, я мог бы получить DateTimeFormatInfo.LongTimePattern, добавить к нему ".fff" и передать его в DateTime.ToString(), но некоторые форматы, специфичные для культуры, в частности США, заканчиваются на AM/PM. Так что это не так просто.

Вторая проблема заключается в том, что DateTime.ToString()не локализует десятичный разделитель чисел. Если бы я решил просто заставить каждую культуру использовать жестко запрограммированный пользовательский формат времени, это все равно не создало бы локализованную строку, поскольку разделитель десятичных чисел не будет специфичным для культуры.

Чтобы еще больше усложнить ситуацию, некоторые культуры имеют форматы даты и времени, которые используют точки как часть своего форматирования. Это затрудняет размещение заполнителя, например точки, и замену его десятичным разделителем, характерным для культуры.

На данный момент я прибегнул к этому обходному пути:

string format = string.Format("HH:mm:ss{0}fff",
    CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
string time = DateTime.Now.ToString(format);

Который, я думаю, должен работать для всех культур, которые не имеют того же десятичного разделителя, что и разделитель времени, но это предположение.

Примечание. Хотя было бы неплохо иметь решение обеих проблем, для моего конкретного приложения меня больше интересует локализация пользовательского формата даты и времени с долями секунды, чем использование стандартного формата даты и времени.

10
задан Joel McBeth 20 March 2012 в 20:46
поделиться