C# 在ASP.NET MVC中将客户端日期时间转换为服务器日期时间

C# 在ASP.NET MVC中将客户端日期时间转换为服务器日期时间,c#,asp.net-mvc,date,C#,Asp.net Mvc,Date,我有一个简单的模型,如: [MyRequired(Error = "Invalid date time")] public DateTime LastUpdate { get;set; } ... 和MyRequiredAttributeclass: public class MyRequiredAttribute: RequiredAttribute { public override IsValid(object value) { //value get fr

我有一个简单的模型,如:

[MyRequired(Error = "Invalid date time")]
public DateTime LastUpdate
{
   get;set;
}

...
MyRequiredAttribute
class:

public class MyRequiredAttribute: RequiredAttribute {
   public override IsValid(object value) {
        //value get from request is `01/01/0001 00:00:00 ...`
        DateTime parsedTime = DateTime.Parse(value.ToString());

        // here throws exception
   }
}
在Javascript方面,使用
Datepicker
plugin,我使用了

<input type="text" id="LastUpdate" name="LastUpdate" class="datepicker" value="<%=DateTime.Now.ToString( "dd-MM-yyyy" )%>" />
每次,我都从请求
01/01/0001
值接收到一个错误,并抛出一个格式不正确的错误


如何从
dd-MM-yyyy
格式转换为
MM/dd/yyyy
格式?MVC可能只接受
MM/dd/yyyy
格式。

在您的模型中,请使用以下方式

public string LastUpdate
{
  get;set;
}
现在,在控制器中,如果处于编辑模式,则按以下方式绑定

Model.LastUpdate = FetchDateFromServer.ToString("dd-MM-yyyy")

otherwise

Model.LastUpdate = DateTime.UtcNow.ToString("dd-MM-yyyy")
现在从您的视图中删除输入type=“text”中的值,如果它是强类型的,则需要

<input type="text" id="LastUpdate" name="LastUpdate" class="datepicker" />


我希望它能起作用,因为它在我的项目中非常有效

我认为你应该写

$("#dates").datepicker("option", "dateFormat", "dd-mm-yy");   // it will give format dd-mm-yy

代替

$(".datepicker").datepicker({ dateFormat: 'dd-mm-yy' });
或者在服务器端,您可以这样做

const string dateformate = "dd/MM/yyyy";
var reachDate = DateTime.ParseExact(dates, dateformate, CultureInfo.InvariantCulture);

这将把任何日期转换为dd/MM/yyyy格式。

签出IFormatProvider。您可以指定要解析的入站字符串的格式<代码>值是对象。如果我将
值设置为Datetime
,那么在获取时会给我
01-01-0001
@snakeyes,以便将其转换为我在下一个示例中首次显示的正确格式,您可以使用Datetime。UtcNow@SnakeEyes我已经更新了我的答案。这可能对您有帮助。我想解析从Http请求收到的内容,而不是现在的日期。没有客户端是问题的。只是来自服务器…在服务器端我想进行转换。您的解决方案适用于
公共字符串LastUpdate
而不是
公共日期时间LastUpdate
$(".datepicker").datepicker({ dateFormat: 'dd-mm-yy' });
const string dateformate = "dd/MM/yyyy";
var reachDate = DateTime.ParseExact(dates, dateformate, CultureInfo.InvariantCulture);