[英]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.