解析日期时间,但是dt正在将日期从8日改为7日?

时间:2011-03-11 18:52:40

标签: c# parsing datetime

DateTime dt = DateTime.Parse(value)

我的价值= {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 个答案:

答案 0 :(得分:3)

我无法重现你的问题。以下代码适用于我,当天部分没有变化:

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

请尝试发布可以重现问题的实际代码。

更新:
既然您发布了一些代码,我可以说以下内容:
你的代码似乎没有意义。为什么呢?
因为您的代码只会执行if子句,所以如果值是DateTime。但在这种情况下,您首先以某种方式将其转换为GetFieldValueAsText的文本,然后将该文本解析为DateTime。只需直接使用value即可 无论如何,即使使用那些奇怪的代码,如果field.GetFieldValueAsText(value)能够正常工作,它应该可以工作,我怀疑它是否正常工作。你确定它确实返回了正确的字符串吗?

答案 1 :(得分:3)

我的直觉告诉我代码中有拼写错误。可能缺少任务。

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"; 
    }  
}

答案 2 :(得分:2)

DateTime总是有时间,但你不必对它做任何事情。例如,如果您需要向用户显示DateTime,请不要显示时间:

var display = DateTime.Now.ToShortDateString()

答案 3 :(得分:1)

DateTime数据类型存储日期和时间。没有办法改变这一点。

如果要更改显示日期时显示日期的方式,请将其格式化为仅显示日期。例如,使用dt.ToString("D");dt.ToShortDateString();

答案 4 :(得分:1)

DateTime结构代表一个时刻,通常表示为日期和时间

如果您只想要时间部分,可以选择 dt.ToShortTimeString();