.net Культурное форматирование 12/24 часа - PullRequest
4 голосов
/ 11 ноября 2011

Есть ли способ сохранить форматирование даты и времени для конкретной культуры, но заставить 12/24 часовой рендеринг? Я знаю, что могу многое сделать с фактической строкой формата даты / времени, такой как HH:mm:ss и hh:mm:ss, но я хотел бы соблюдать текущее форматирование культуры пользователя (то есть mm/dd/yyyy или yyyy/mm/dd и т. Д.), Просто принудительно 12 / Рендеринг 24 часа.

Ответы [ 4 ]

10 голосов
/ 11 ноября 2011

Я бы, наверное, сделал что-то вроде этого:

        var culture = CultureInfo.CurrentCulture;
        var pattern = culture.DateTimeFormat.LongTimePattern; // or pick which one you want to use;
        var newPattern = pattern.Replace("h", "H").Replace("t", "");
        DateTime.Now.ToString(newPattern); // or use whatever DateTime you want to use

Из чата:

Вот список длинных шаблонных строк всех культур и их изменение.:

Old: hh:mm:ss tt New: HH:mm:ss 
Old: HH:mm:ss 'ч.' New: HH:mm:ss 'ч.'
Old: HH:mm:ss New: HH:mm:ss
Old: H:mm:ss New: H:mm:ss
Old: h:mm:ss tt New: H:mm:ss 
Old: tt h:mm:ss New:  H:mm:ss
Old: h:mm:ss.tt New: H:mm:ss.
Old: HH.mm.ss New: HH.mm.ss
Old: tt hh:mm:ss New:  HH:mm:ss
5 голосов
/ 11 ноября 2011

Вы можете использовать пользовательские строки формата даты / времени - например:

Для 12-часового рендеринга:

DateTime.Now.ToString("hh:mm:ss tt");

для 24-часового рендеринга:

DateTime.Now.ToString("HH:mm:ss");

Чтобы объединить с форматом даты из текущей культуры, вы можете использовать один из:

DateTime.Now.ToString("d") + DateTime.Now.ToString(" hh:mm:ss tt");
DateTime.Now.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + 
                                      " hh:mm:ss tt");
1 голос
/ 11 ноября 2011

Это зависит от того, о каких культурах вы говорите. Некоторые культуры не принимают 24-часовое время, а другие не принимают AM / PM. Самый безопасный выбор, вероятно, InvariantCulture.

0 голосов
/ 11 ноября 2011

Используйте DateTime.ToShortTimeString () , чтобы убедиться, что вы получаете версию, соответствующую вашей культуре.Примечание. По умолчанию используются текущие настройки культуры потока.

Пример (от MSDN ):

// This code example demonstrates the DateTime.ToLongDateString(),
// DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
// DateTime.ToShortTimeString() methods.

using System;
using System.Threading;
using System.Globalization;

class Sample 
{
    public static void Main() 
    {
    string msg1 = "The date and time patterns are defined in the DateTimeFormatInfo \n" +
                  "object associated with the current thread culture.\n";

// Initialize a DateTime object.
    Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM.\n");
    DateTime myDateTime = new System.DateTime(2001, 5, 16, 3, 2, 15);

// Identify the source of the date and time patterns.
    Console.WriteLine(msg1);

// Display the name of the current culture.
    CultureInfo ci = Thread.CurrentThread.CurrentCulture;
    Console.WriteLine("Current culture: \"{0}\"\n", ci.Name);

// Display the long date pattern and string.
    Console.WriteLine("Long date pattern: \"{0}\"", ci.DateTimeFormat.LongDatePattern);
    Console.WriteLine("Long date string:  \"{0}\"\n", myDateTime.ToLongDateString());

// Display the long time pattern and string.
    Console.WriteLine("Long time pattern: \"{0}\"", ci.DateTimeFormat.LongTimePattern);
    Console.WriteLine("Long time string:  \"{0}\"\n", myDateTime.ToLongTimeString());

// Display the short date pattern and string.
    Console.WriteLine("Short date pattern: \"{0}\"", ci.DateTimeFormat.ShortDatePattern);
    Console.WriteLine("Short date string:  \"{0}\"\n", myDateTime.ToShortDateString());

// Display the short time pattern and string.
    Console.WriteLine("Short time pattern: \"{0}\"", ci.DateTimeFormat.ShortTimePattern);
    Console.WriteLine("Short time string:  \"{0}\"\n", myDateTime.ToShortTimeString());
    }
}

/*
This code example produces the following results:

Initialize the DateTime object to May 16, 2001 3:02:15 AM

The date and time patterns are defined in the DateTimeFormatInfo
object associated with the current thread culture.

Current culture: "en-US"

Long date pattern: "dddd, MMMM dd, yyyy"
Long date string:  "Wednesday, May 16, 2001"

Long time pattern: "h:mm:ss tt"
Long time string:  "3:02:15 AM"

Short date pattern: "M/d/yyyy"
Short date string:  "5/16/2001"

Short time pattern: "h:mm tt"
Short time string:  "3:02 AM"

*/
...