У меня есть объект DateTime, и я хочу вывести часы, минуты, секунды и доли секунды в виде строки, локализованной для текущей культуры.
Есть две проблемы с этим.
Первая проблема - нет стандартного формата DateTime
, который будет показывать доли секунды. По сути, я хочу знать, как получить формат long time 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);
Что, я думаю, должно работать для каждой культуры, в которой нет того же десятичного разделителя, что и разделителя времени, но это предположение.
Примечание. Хотя было бы неплохо решить обе проблемы, для моего конкретного приложения меня больше интересует локализация пользовательского формата даты и времени с долями секунд, чем использование стандартного формата даты и времени.