" DateTime.ParseExact"中的错误何时使用Nullable DateTime

时间:2015-11-02 06:20:52

标签: c# datetime

我有一个Nullable DateTime,我收到了一个错误:

  

其他信息:字符串未被识别为有效的DateTime。

我查看了hereherehere以及here。我也尝试了String.Format("{0:s}", dateTime),但它并没有改变我的DateTime格式。我的代码如下所示,

if (person.JsonData.PasswordChangeRequestTime != null)
{
     DateTime data;  
     data = DateTime.ParseExact(((DateTime)person.JsonData.PasswordChangeRequestTime).Date.ToStringDateTime(), "dd'-'MM'-'yyyy HH':'mm':'ss", CultureInfo.InvariantCulture);   
     person.setColumnValue("passwordchangerequesttime", data);
}

我的一个DateTime是这样的: 1/1/2015 2:00:00 PM 我想要它们的格式 1-1-2015 14:00:00 我的DateTime.ParseExact函数出了什么问题?

顺便说一句,我不想​​使用subString函数!

1 个答案:

答案 0 :(得分:2)

您不需要任何

您的(DateTime)person.JsonData.PasswordChangeRequestTime 已经一个DateTime,您看到的可能是调试器或其他内容。

DateTime没有任何隐式格式。它只有日期和时间值。格式化概念仅在您获得文本(字符串)表示时才有意义,通常使用DateTime.ToString()方法完成。

如果您想获得它的精确字符串表示,您可以使用ToString方法使用适当的格式和文化设置,例如;

((DateTime)person.JsonData.PasswordChangeRequestTime)
                          .ToString("d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture)

生成1/1/2015 2:00:00 PM

((DateTime)person.JsonData.PasswordChangeRequestTime)
                          .ToString("d-M-yyyy HH:mm:ss", CultureInfo.InvariantCulture)

生成1-1-2015 14:00:00格式化的字符串。

如果您的1/1/2015 2:00:00 PMstring,而不是DateTime,则需要先使用正确的格式将其解析为DateTime,然后以适当的格式生成字符串表示形式

string s = "1/1/2015 2:00:00 PM";
DateTime dt;
if(DateTime.TryParseExact(s, "d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    dt.ToString("d-M-yyyy HH:mm:ss", CultureInfo.InvariantCulture);
    // Generates 1-1-2015 14:00:00
}