使用客户机的格式将字符串转换成datetime

问题描述:

我有一个绑定到一个视图使用客户机的格式将字符串转换成datetime

public class ReportModel 
    { 
     [Required]  
     [DateTimeValid] 
     public DateTime FromDate { get; set; } 
     [Required]   
     [DateTimeValid] 
     public DateTime ToDate { get; set; } 
    } 

这里的模型是班DateTimeValid从ValidationAttribute

public class DateTimeValid:ValidationAttribute 
    { 
     public override bool IsValid(object value) 
     { 
      DateTime time;   
      var isvalid = DateTime.TryParseExact(Convert.ToString(value), System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out time); 
      return (isvalid); 


     } 
    } 

TryParseExact总是继承无论我如何在浏览器中输入日期,都返回False。

我的目标是从视图中获取日期,并使用客户机的格式将其转换为DateTime。

也想提一下,我已经使用Jquery Datetime Picker为用户选择日期。

任何帮助将高度赞赏

而且我这样做的正确方法?我错过了什么?

+0

以哪种方式你传递'datetime'串到'TryParse'方法? –

+0

我已经使用了Jquery的DateTime Picker,它打印出基于机器日期格式的日期格式..在我的情况下,这将是M/dd/yyyy。我也尝试手动更改格式,但没有肯定的结果 –

+0

如果您以ISO 8601格式传递日期,那么您应该始终确切知道日期是什么,并且每次都可以正确地将其转换为正确的.net DateTime对象,而不会有任何问题。然后,如果您将相同的格式返回到前端,则可以执行相同的操作。我认为这是你问的,但如果我在错误的切线,只是忽略我 –

返回false的原因是因为日期的值已经转换为DateTime。如果您在断点停止时检查value的值,您将看到它是一个DateTime对象。

之后,Convert.ToString(value)将产生类似"1/1/2010 12:00:00 AM"之类的结果,而您匹配的模式将类似于"M/d/yyyy",这将导致TryParseExact失败。

这些例子来自我的美国机器。你的输出可能看起来不一样,但想法是一样的。

+0

嗨,但tryparse的输入必须是一个字符串。需要做什么? –

+0

问题是,如果您的模型指定DateTime,则尝试分析来自客户端的原始输入为时已晚。您可以将模型更改为使用字符串而不是DateTime,但是当您去使用该值时,会导致更多麻烦。另一种选择是覆盖该模型类型的模型绑定行为并在那里实现解析逻辑。 –

确保您的日期格式正确。基于您的代码,你想ShortDatePattern,相当于(斜线):

01/01/1985 

而不是其他格式如:

01-01-1985 

如果你使用正确的格式,它会返回真:

enter image description here