繁体   English   中英

ASP.NET MVC3,C#,Datetime.Parse()

[英]Asp.net mvc3, C#, Datetime.Parse()

这很奇怪。 我具有来自Http GET的日期格式数据,并且使用模型类包装日期。 就是这样

// Model

public class wrapModel
{
  public DateTime mydate{get; set;}
}

和,

// controller
[HttpGet]
public void myController(wrapModel data){
   Response.Write(searchModel.mydate.ToString());
}

并使用浏览器myhost / home / myController / mydate = 05/05/2012调用控制器

然后它会显示“ 5/5/2012 12:00:00 AM” ,我只希望5/5/2012。

我不需要时间。 所以我试图解析日期。

data.mydata = DateTime.parse(data.mydata.ToString("MM/dd/yyyy"));

但它仍显示“ 5/5/2012 12:00:00 AM”

如何将格式更改为“ 5/5/2012”?

有人知道,请指教我〜

谢谢!

我想解析来自Http GET的datetime格式数据。

但我没有改变

[编辑]

感谢您的所有回答和宝贵的时间! 但我仍然有问题。 请帮助我更多:)

首先,我需要DateTime格式的数据,而不是字符串类型,因为我将使用Linq中的日期来检索数据库日期。

我试过了,

1)

[DisplayFormat(DataFormatString="{0:MM/dd/yyyy}", ApplyFormatInEditMode=true)]
public DateTime mydate { get; set; }

[HttpGet]
public ActionResult myController(wrapModel data){
   return Content(searchModel.mydate.ToString());
}

仍然打印“ 5/5/2012 12:00:00 AM”

2)

[HttpGet]
public ActionResult myController(wrapModel data){
   return Content(searchModel.mydate.ToString("MM/dd/yyyy"));
}

它也改变了格式,但是我需要DateTime格式,所以我再次转换为DateTime。

[HttpGet]
public ActionResult myController(wrapModel data){
   searchModel.mydate = DateTime.Parse(searchModel.mydate.ToString("MM/dd/yyyy"));
   return Content(searchModel.mydate.ToString());
}

然后再次打印“ 5/5/2012 12:00:00 AM”。

3)

searchModel.etaDate.ToString("d")

与上述相同,将其转换为DateTime然后打印“ 5/5/2012 12:00:00 AM”

我使用Response.Write()进行简单的返回值测试,但是有什么重要的原因不能使用Response.Write()方法吗? 我想学习 :)

非常感谢!

[编辑]

我需要为此输入DateTime类型的数据,

Repository myRespository = new Respository();

var data = (from x in myRepository.myContext
            where x.thedate == mydate  // thedate is datetime type, so I need datetime type for compare
            select x.no).SingleOrDefault()

我试过了,

string test = mydate.ToShortDateString();

(...
where x.thedate.ToString() == test
...)

但它不起作用。

如何将格式更改为“ 5/5/2012”?

首先,您必须使用正确的格式传递参数,对于GET请求,该格式始终为 yyyy-MM-dd

http://myhost/home/myController/mydate=2012-05-05

我强调这个词总是 ,因为这是了解非常重要。 这是因为默认模型绑定程序在解析GET请求中的日期时始终使用InvariantCulture,而在解析POST请求中的日期时则使用当前区域性。 有一篇不错的文章对此进行了解释,并说明了做出此设计决定的原因。

接着:

Response.Write(searchModel.mydate.ToString("MM/dd/yyyy"));

好吧,实际上,不是Response.Write因为您永远不会在ASP.NET MVC应用程序中执行此操作,而是希望从控制器操作中返回ActionResult:

[HttpGet]
public ActionResult MyAction(wrapModel data)
{
    return Content(data.mydate.ToString("MM/dd/yyyy"));
}

否则您将使用DisplayFormat属性修饰视图模型:

public class wrapModel
{
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime mydate { get; set; }
}

或者如果您想考虑当前的区域性短日期格式:

public class wrapModel
{
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    public DateTime mydate { get; set; }
}

然后让您的控制器操作将此模型传递给视图:

public ActionResult MyAction(wrapModel data)
{
    return View(data);
}

当然,在相应的强类型视图中,请使用DisplayFor / EditorFor帮助器以所需的格式实现所需的输出:

@model wrapModel
<span>
    @Html.DisplayFor(x => x.mydate)
</span>

采用

datevar.ToShortDateString();

(注意:Darin的答案对于MVC非常有用。我将其发布为更多常规信息。)

但它仍显示“ 5/5/2012 12:00:00 AM”

是的,会的。 仅仅是因为您解析了一个仅包含日期的值,所以DateTime值不知道该值。 只是一个日期和时间。 如果在其上调用ToString ,它将始终使用当前区域性的默认格式。

我强烈建议您避免比绝对必要做更多的转换。 尽可能早地解析该值,然后在内部将其保留为DateTime直到绝对必须将其转换回字符串为止-以便在无法本地使用DateTime的系统中使用(例如,保存到文件中)或将其写回用户。

如果打算把它写回给用户,你应该确保您使用适当的培养用户,并使用相应的格式字符串-例如, d为“短日期”。 虽然可以使用ToShortDateString ,但不允许您指定区域性,而ToString可以:

string text = date.ToString("d", culture);

无论您在向用户显示信息的任何地方,我都强烈建议使用标准格式:对于日期,请使用“ yyyy-MM-dd”,对于日期,请使用“ yyyy-MM-dd'T'HH:mm:ss.fffffffK”日期/时间值。 (后者由o标准格式字符串表示。)

请注意,格式对于日期确实很重要。 如果您显示的网页上显示“ 08/07/2012”,则不知道是8月7日还是7月8日。

解析后,请使用.ToShortDateString()

您应该在自己的视图中使用该代码:

item.mydate.Value.ToShortDateString()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM