2011-03-11 26 views
3

日期时间DT = DateTime.Parse(值)解析datetime但dt正在改变从8日到7日?

凡我值= {3/8/2011 12:00:00 AM}

但dt的表示DT = {2011/3/7 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"; 
    } 
} 
+1

我不能重现这一点。请添加**完全**代码,不符合您的问题。 – 2011-03-11 19:03:14

+1

这根本不可能。还有一些我们不知道的更微妙的事情。 – vcsjones 2011-03-11 19:05:18

+0

发布的信息不是很准确。调试器从不显示带有大括号的字符串,它使用双引号。发布屏幕截图。 – 2011-03-11 19:24:09

回答

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

你在说什么。 Datetime dt = Datetime.Parse(值)。这种情况的价值是3/8/2011 12:00:00 AM。所以dt应该是3/8/2011非2011/3/7 – 2011-03-11 19:16:29

+0

这条线做了魔术。 DateTime dt =(DateTime)值;谢谢 – 2011-03-11 19:43:06

1

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

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

+0

阻止所有人。我不在乎时间。看看实际的日期。我喂养3/8/2011(2011年3月8日),但结果是2011年3月7日(2011年3月7日) – 2011-03-11 19:01:27

+1

@Madhu:也许你没有为这个问题选择一个很好的科目。如果它正在阅读不同的日期,请发布您的代码。这对我来说很好。 – 2011-03-11 19:02:45

1

DateTime结构代表即时时刻,通常表示为一天中的日期和时间

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

+0

阻止所有人。我不在乎时间。看看实际的日期。我喂养3/8/2011(2011年3月8日),但结果是3/7/2011(2011年3月7日) – 2011-03-11 19:01:11

2

A DateTime将永远有一个时间,但你不必做任何事情。举例来说,如果你需要显示DateTime回给用户,只是不显示时间:

var display = DateTime.Now.ToShortDateString() 
+0

阻止每个人。我不在乎时间。看看实际的日期。我喂养3/8/2011(2011年3月8日),但结果是3/7/2011(2011年3月7日) – 2011-03-11 19:00:45

3

我无法重现你的问题。以下代码适用于我,日间部分无变化:

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)会正常工作,我怀疑它。你检查过它确实返回了正确的字符串吗?

+0

我没有var(使用.net 2.0)。另外,我没有看到cultureinfo。我只看到CultureInfoConverter。 – 2011-03-11 19:06:08

+0

我添加了全球化,现在看到CultureInfo,但它没有工作。 – 2011-03-11 19:08:26

+0

@Madhu:我改变了代码。对于'CultureInfo',把它添加到你的cs文件的顶部:'using System.Globalization;' – 2011-03-11 19:08:43