Отформатируйте строку для правильного отображения даты

Мне нужна помощь в преобразовании этой строки -> 20090727 10:16:36:643 к -> 07/27/2009 10:16:36

Исходная дата и время возвращаются SynchronizationAgent.LastUpdated() функция, которая возвращает строку в вышеуказанном формате.


Оригинальный вопрос: сохранено для справки

У меня есть это ->

 HUD.LastSyncDate = mergeSubscription.SynchronizationAgent.LastUpdatedTime;

Который устанавливает свойство, которое выглядит следующим образом ->

public static string LastSyncDate
    {
        get { return _lastSyncDate; }
        set
        {
            _lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", value);
        }
    }

К сожалению, с или без String.Format отображаемая дата выглядит следующим образом -> 20090727 10:16:36:643

Я пробовал несколько вариантов, чтобы отформатировать его так, как я хочу. Что мне не хватает?

Основываясь на приведенных ниже предложениях (восновном Джоэла), я внес предложенные изменения, но все еще получаю "String is not a valid DateTime error"

Я также пытался реализовать это ->

HUD.LastSyncDate = DateTime.ParseExact(mergeSubscription.SynchronizationAgent.LastUpdatedTime,"yyyyMMdd HH:mm:ss:fff",CultureInfo.InvariantCulture);

но все равно ничего.

3 ответа

Решение

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

DateTime lastUpdated = DateTime.Parse( mergeSubscription.SynchronizationAgent.LastUpdatedTime );
HUD.LastSyncDate = string.Format( "{0:G}", lastUpdated );

public static string LastSyncDate { get; set; }

Обратите внимание, что вам может понадобиться использовать ParseExact вместо этого.

DateTime lastUpdated = DateTime.ParseExact( "yyyyMMdd HH:mm:ss:fff",
                                            ...,
                                            CultureInfo.InvariantCulture );
HUD.LastSyncDate = DateTime.Parse(mergeSubscription.SynchronizationAgent.LastUpdatedTime).ToString("MM/dd/yyyy")

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

private static DateTime _lastSyncDate;
public static DateTime LastSyncDate
{
    get { return _lastSyncDate; }
    set { _lastSyncDate = value;}
}

public static string LastSyncDateString
{
    get { return LastSyncDate.ToString("MM/dd/yyyy"); }
}

Держите это как datetime в фоновом режиме и просто используйте строковое свойство для отображения.

Что ты хочешь делать? Вы получаете строку, передайте ее String.Format() и сохранить его в строковом поле. Вы хотите переформатировать строку? В этом случае вы должны проанализировать строку обратно DateTime и снова отформатируйте это значение.

DateTime dateTime;
if (DateTime.TryParse(value, out dateTime))
{
    lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", dateTime);
}
else
{
    HandleInvalidInput(value);
}
Другие вопросы по тегам