C# 将值分配给可为空的datetime时,字符串未被识别为有效的datetime

C# 将值分配给可为空的datetime时,字符串未被识别为有效的datetime,c#,entity-framework,datetime,nullable,C#,Entity Framework,Datetime,Nullable,我有一个文本框,从中以“MM/dd/yyyy”格式将日期作为字符串发送,当我将该值分配给可为空的datetime属性值时,由于字符串未被识别为有效的datetime,因此出现了错误,我正在转换字符串,如下所示,然后也会出现相同的错误 private Tbl_UserDetails GetAnnouncementInformation(Tbl_UserDetails userDetails, Dictionary<string, object> details) { userDet

我有一个文本框,从中以“MM/dd/yyyy”格式将日期作为字符串发送,当我将该值分配给可为空的datetime属性值时,由于字符串未被识别为有效的datetime,因此出现了错误,我正在转换字符串,如下所示,然后也会出现相同的错误

private Tbl_UserDetails GetAnnouncementInformation(Tbl_UserDetails userDetails, Dictionary<string, object> details)
{
  userDetails.JoiningDate = string.IsNullOrEmpty(details["JoiningDate "].ToString()) ?
                            (DateTime?)null : 
                             DateTime.ParseExact(details["JoiningDate "].ToString(),
                             "MM/dd/yyyy", null);

  userDetails.JoiningDate = string.IsNullOrEmpty(details["JoiningDate "].ToString()) ?
                            (DateTime?)null : 
                             DateTime.ParseExact(details["JoiningDate "].ToString(),
                             "MM/dd/yyyy", CultureInfo.InvariantCulture);
}
private Tbl\u UserDetails GetAnnouncementInformation(Tbl\u UserDetails UserDetails,Dictionary details)
{
userDetails.JoiningDate=string.IsNullOrEmpty(详细信息[“JoiningDate”].ToString())?
(日期时间?)空:
DateTime.ParseExact(详细信息[“JoiningDate”].ToString(),
“MM/dd/yyyy”,空);
userDetails.JoiningDate=string.IsNullOrEmpty(详细信息[“JoiningDate”].ToString())?
(日期时间?)空:
DateTime.ParseExact(详细信息[“JoiningDate”].ToString(),
“MM/dd/yyyy”,CultureInfo.InvariantCulture);
}
在这两方面,我都得到了相同的错误。请在这方面帮助我。

你可以做:

DateTime tempDate;
userDetails.JoiningDate = DateTime.TryParseExact(
  details["JoiningDate "].ToString(), 
  "MM/dd/yyyy", 
  CultureInfo.InvariantCulture, 
  DateTimeStyles.None, 
  out tempDate) 
? tempDate 
: (DateTime?)null;
延长:

public static class MyExtensions
{
    public static DateTime? GetNullableDateTime(
        this String str, string format = "MM/dd/yyyy")
    {
        DateTime tempDate;
        var result = DateTime.TryParseExact(str, format, 
            CultureInfo.InvariantCulture, DateTimeStyles.None, out tempDate) 
        ? tempDate 
        : default(DateTime?);
        return result;
    }
}   
它看起来像:

userDetails.JoiningDate = 
    details["JoiningDate "].ToString().GetNullableDateTime();
示例程序

Assert.IsNull("sddfsdf".GetNullableDateTime());
Assert.IsNotNull("10/20/2014".GetNullableDateTime());
Assert.IsNotNull("20.10.2014".GetNullableDateTime("dd.MM.yyyy"));
你可以做:

DateTime tempDate;
userDetails.JoiningDate = DateTime.TryParseExact(
  details["JoiningDate "].ToString(), 
  "MM/dd/yyyy", 
  CultureInfo.InvariantCulture, 
  DateTimeStyles.None, 
  out tempDate) 
? tempDate 
: (DateTime?)null;
延长:

public static class MyExtensions
{
    public static DateTime? GetNullableDateTime(
        this String str, string format = "MM/dd/yyyy")
    {
        DateTime tempDate;
        var result = DateTime.TryParseExact(str, format, 
            CultureInfo.InvariantCulture, DateTimeStyles.None, out tempDate) 
        ? tempDate 
        : default(DateTime?);
        return result;
    }
}   
它看起来像:

userDetails.JoiningDate = 
    details["JoiningDate "].ToString().GetNullableDateTime();
示例程序

Assert.IsNull("sddfsdf".GetNullableDateTime());
Assert.IsNotNull("10/20/2014".GetNullableDateTime());
Assert.IsNotNull("20.10.2014".GetNullableDateTime("dd.MM.yyyy"));
你可以做:

DateTime tempDate;
userDetails.JoiningDate = DateTime.TryParseExact(
  details["JoiningDate "].ToString(), 
  "MM/dd/yyyy", 
  CultureInfo.InvariantCulture, 
  DateTimeStyles.None, 
  out tempDate) 
? tempDate 
: (DateTime?)null;
延长:

public static class MyExtensions
{
    public static DateTime? GetNullableDateTime(
        this String str, string format = "MM/dd/yyyy")
    {
        DateTime tempDate;
        var result = DateTime.TryParseExact(str, format, 
            CultureInfo.InvariantCulture, DateTimeStyles.None, out tempDate) 
        ? tempDate 
        : default(DateTime?);
        return result;
    }
}   
它看起来像:

userDetails.JoiningDate = 
    details["JoiningDate "].ToString().GetNullableDateTime();
示例程序

Assert.IsNull("sddfsdf".GetNullableDateTime());
Assert.IsNotNull("10/20/2014".GetNullableDateTime());
Assert.IsNotNull("20.10.2014".GetNullableDateTime("dd.MM.yyyy"));
你可以做:

DateTime tempDate;
userDetails.JoiningDate = DateTime.TryParseExact(
  details["JoiningDate "].ToString(), 
  "MM/dd/yyyy", 
  CultureInfo.InvariantCulture, 
  DateTimeStyles.None, 
  out tempDate) 
? tempDate 
: (DateTime?)null;
延长:

public static class MyExtensions
{
    public static DateTime? GetNullableDateTime(
        this String str, string format = "MM/dd/yyyy")
    {
        DateTime tempDate;
        var result = DateTime.TryParseExact(str, format, 
            CultureInfo.InvariantCulture, DateTimeStyles.None, out tempDate) 
        ? tempDate 
        : default(DateTime?);
        return result;
    }
}   
它看起来像:

userDetails.JoiningDate = 
    details["JoiningDate "].ToString().GetNullableDateTime();
示例程序

Assert.IsNull("sddfsdf".GetNullableDateTime());
Assert.IsNotNull("10/20/2014".GetNullableDateTime());
Assert.IsNotNull("20.10.2014".GetNullableDateTime("dd.MM.yyyy"));


details[“JoiningDate”]的值是多少。ToString()
和您的
CurrentCulture
?您是否设置了断点并查看了
JoiningDate
的内容?内容是什么?我得到“08/25/2014”作为字符串value@Rocky所以,你是说<代码>日期时间.ParseExact(“2014年8月25日”,“年月日”,CultureInfo.InvariantCulture)抛出
格式异常
?没有。问题可能在其他地方?这只是另一个提醒:在数据库列中以字符串形式存储日期是一个多么糟糕的主意。
详细信息[“JoiningDate”]的值是多少。ToString()
和您的
当前文化
?您是否设置了断点并查看了
JoiningDate
的内容?内容是什么?我得到“08/25/2014”作为字符串value@Rocky所以,你是说<代码>日期时间.ParseExact(“2014年8月25日”,“年月日”,CultureInfo.InvariantCulture)抛出
格式异常
?没有。问题可能在其他地方?这只是另一个提醒:在数据库列中以字符串形式存储日期是一个多么糟糕的主意。
详细信息[“JoiningDate”]的值是多少。ToString()
和您的
当前文化
?您是否设置了断点并查看了
JoiningDate
的内容?内容是什么?我得到“08/25/2014”作为字符串value@Rocky所以,你是说<代码>日期时间.ParseExact(“2014年8月25日”,“年月日”,CultureInfo.InvariantCulture)抛出
格式异常
?没有。问题可能在其他地方?这只是另一个提醒:在数据库列中以字符串形式存储日期是一个多么糟糕的主意。
详细信息[“JoiningDate”]的值是多少。ToString()
和您的
当前文化
?您是否设置了断点并查看了
JoiningDate
的内容?内容是什么?我得到“08/25/2014”作为字符串value@Rocky所以,你是说<代码>日期时间.ParseExact(“2014年8月25日”,“年月日”,CultureInfo.InvariantCulture)抛出
格式异常
?没有。问题可能出在其他地方?这只是另一个提醒:在数据库列中以字符串形式存储日期是多么糟糕的想法。我已经使用过这个方法,但它是在扩展方法中使用的。为什么要将
null
转换为
(DateTime?
?只需返回
null
@James,如果您有静态内容检查器,它们将在那里给出一个错误。原因是null不传递任何类型信息。但是,我不确定默认值(DateTime?)是否具有预期值。我还打算建议
default(DateTime?
,但最终将返回
null
。但是,不管我是否使用静态类型检查器,我都会说这样的场景是规则的例外。我得到的是null作为返回值,而不是我使用的日期,而是在一个扩展方法中。为什么要将
null
转换为
(DateTime?
?只需返回
null
@James,如果您有静态内容检查器,它们将在那里给出一个错误。原因是null不传递任何类型信息。但是,我不确定默认值(DateTime?)是否具有预期值。我还打算建议
default(DateTime?
,但最终将返回
null
。但是,不管我是否使用静态类型检查器,我都会说这样的场景是规则的例外。我得到的是null作为返回值,而不是我使用的日期,而是在一个扩展方法中。为什么要将
null
转换为
(DateTime?
?只需返回
null
@James,如果您有静态内容检查器,它们将在那里给出一个错误。原因是null不传递任何类型信息。但是,我不确定默认值(DateTime?)是否具有预期值。我还打算建议
default(DateTime?
,但最终将返回
null
。但是,不管我是否使用静态类型检查器,我都会说这样的场景是规则的例外。我得到的是null作为返回值,而不是我使用的日期,而是在一个扩展方法中。为什么要将
null
转换为
(DateTime?
?只需返回
null
@James,如果您有静态内容检查器,它们将在那里给出一个错误。原因是null不传递任何类型信息。然而,我不确定默认值(DateTime?)是否会有预期的价值。我还打算建议
default(DateTime?
,但这最终只会使