Форматирование даты / времени в C # - PullRequest
4 голосов
/ 08 сентября 2011

У меня есть строка даты / времени, которая выглядит следующим образом:

Wed Sep 21 2011 12:35 PM Pacific

Как мне отформатировать DateTime так, чтобы это выглядело?

Спасибо!

Ответы [ 4 ]

9 голосов
/ 08 сентября 2011

Бит перед часовым поясом прост, используя пользовательскую строку формата даты и времени :

string text = date.ToString("ddd MMM dd yyyy hh:mm t");

Однако я считаю, что форматирование даты / времени в .NET будет не даст вам "тихоокеанскую" часть.Лучшее, что он может вам дать - это часовой пояс смещение от UTC.Это нормально, если вы можете получить имя часового пояса другим способом.

Количество TimeZoneInfo идентификаторов включает слово Pacific, но не существует слова, которое просто "Pacific"».

6 голосов
/ 08 сентября 2011
string.Format("{0} {1}", DateTime.Now.ToString("ddd MMM dd yyyy HH:mm tt"), TimeZone.CurrentTimeZone.StandardName);
//Result: Wed Sep 07 2011 14:29 PM Pacific Standard Time

Обрежьте стандартное время, если вы не хотите, чтобы показ.

EDIT: Если вам нужно сделать это повсеместно, вы также можете расширить DateTime, чтобы включить метод, который сделает это за вас.

void Main()
{
    Console.WriteLine(DateTime.Now.MyCustomToString());
}

// Define other methods and classes here
public static class DateTimeExtensions
{
    public static string MyCustomToString(this DateTime dt)
    {
        return string.Format("{0} {1}", DateTime.Now.ToString("ddd MMM dd yyyy HH:mm tt"), TimeZone.CurrentTimeZone.StandardName).Replace(" Standard Time", string.Empty);
    }
}

Вы можете запустить этот пример в LinqPad с прямым копированием, вставкой и запуском в режиме Программы.

БОЛЬШЕ РЕДАКТИРОВАТЬ

После комментариев снизу это обновленная версия.

void Main()
{
    Console.WriteLine(DateTime.Now.MyCustomToString());
}

// Define other methods and classes here
public static class DateTimeExtensions
{
    public static string MyCustomToString(this DateTime dt)
    {
        return string.Format("{0:ddd MMM dd yyyy hh:mm tt} {1}", DateTime.Now, TimeZone.CurrentTimeZone.StandardName).Replace(" Standard Time", string.Empty);
    }
}
5 голосов
/ 08 сентября 2011
2 голосов
/ 08 сентября 2011

Обратите внимание, что это может быть немного грубым, но может привести вас в правильном направлении.

Взяв и добавив к сказанному Джоном:

string text = date.ToString("ddd MMM dd yyyy hh:mm t");

А затем добавьте что-то вроде этого:

    TimeZone localZone = TimeZone.CurrentTimeZone;
    string x = localZone.StandardName.ToString();
    string split = x.Substring(0,7);
    string text = date.ToString("ddd MMM dd yyyy hh:mm t") + " " + split;

Я не проверял, но надеюсь, это поможет!

...