парсинг datetime но dt меняет день с 8го на 7го? - PullRequest
3 голосов
/ 11 марта 2011

DateTime dt = DateTime.Parse (значение)

Где мое значение = {3/8/2011 12:00:00 AM}

, но dt показывает dt = {3 /7/2011 12:00:00 AM}

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

РЕДАКТИРОВАТЬ: Код OP опубликован в качестве комментария:

foreach (SPField field in contentType.Fields)
{
    string fValue;
    object value = spitem[field.Id];
    if (value is DateTime)
    {
        DateTime dateField = DateTime.Parse(field.GetFieldValueAsHtml(value));
        DateTime dt = DateTime.Parse(field.GetFieldValueAsText(value), CultureInfo.GetCultureInfo("en-US"));
        fValue = dt.ToShortDateString();
        lblMetaData.Text += field + ": " + fValue + "\r\n";
    }
    else
    {
        fValue = field.GetFieldValueForEdit(value);
        lblMetaData.Text += field + ": " + fValue + "\r\n";
    }
}

Ответы [ 5 ]

3 голосов
/ 11 марта 2011

Моя интуиция говорит мне, что в коде есть опечатка.Вероятно, пропущено задание.

DateTime dt = DateTime.Parse("3/7/2011 12:00:00 AM");
....
DateTime.Parse("3/8/2011 12:00:00 AM"); //Parse's return is being ignored
....
dt is still {3/7/2011 12:00:00 AM}

Убедитесь, что вызов DateTime.Parse("3/8/2011 12:00:00 AM"); назначен на dt.


Исходя из ваших правок, я чувствую, что ваш код будет лучше, но такопубликованный код все еще должен работать.

foreach (SPField field in contentType.Fields) 
{ 
    string fValue;
    object value = spitem[field.Id]; 

    if (value is DateTime) 
    { 
        DateTime dt = (DateTime)value;
        fValue = dt.ToShortDateString(); 
        lblMetaData.Text += field + ": " + fValue + "\r\n";
    } 
    else 
    {         
        fValue = field.GetFieldValueForEdit(value); 
        lblMetaData.Text += field + ": " + fValue + "\r\n"; 
    }  
}
3 голосов
/ 11 марта 2011

Я не могу воспроизвести вашу проблему. Следующий код работает для меня, без изменений в части дня:

DateTime dt = DateTime.Parse("3/8/2011 12:00:00 AM", CultureInfo.GetCultureInfo("en-US")); 
Assert.AreEqual(new DateTime(2011, 3, 8), dt);

Пожалуйста, попробуйте опубликовать фактический код, который воспроизводит вашу проблему.

UPDATE:
Теперь, когда вы опубликовали код, я могу сказать следующее:
Ваш код, кажется, не имеет смысла. Почему?
Потому что ваш код будет выполнять только предложение if, если значение равно DateTime. Но в этом случае вы сначала каким-то образом конвертируете его в текст с GetFieldValueAsText и анализируете этот текст обратно в DateTime. Просто используйте value напрямую.
Во всяком случае, даже с этим странным кодом, он должен работать, если field.GetFieldValueAsText(value) будет работать правильно, что я сомневаюсь, что это работает. Вы проверили, что он действительно возвращает правильную строку?

2 голосов
/ 11 марта 2011

A DateTime всегда будет иметь время, но вам не нужно ничего с ним делать.Например, если вам нужно отобразить DateTime обратно пользователю, просто не показывайте время:

var display = DateTime.Now.ToShortDateString()
1 голос
/ 11 марта 2011

Структура DateTime представляет момент времени, обычно выражаемый в виде даты и времени дня.

Если вы хотите только часть времени, вы можете выбрать dt.ToShortTimeString ();

1 голос
/ 11 марта 2011

Тип данных DateTime хранит дату и время.Изменить это невозможно.

Если вы хотите изменить способ отображения даты при ее отображении, просто отформатируйте ее так, чтобы отображалась только дата.Например, используйте dt.ToString("D"); или dt.ToShortDateString();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...