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";
}
}
答案 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();