这很奇怪。我有来自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格式数据,而不是字符串类型,因为我将使用Linq中的日期来检索DB日期。
我试过了,
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"));
}
它也改变了foramt,但我需要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
...)
但它不起作用。
答案 0 :(得分:5)
如何将格式更改为“5/5/2012”?
首先,您必须使用正确的格式传递参数,格式为始终 yyyy-MM-dd
,用于GET请求:
http://myhost/home/myController/mydate=2012-05-05
我强调总是这个词,因为这一点非常重要。原因是默认模型绑定器始终在从GET请求解析日期时使用InvariantCulture,并且在从POST请求解析日期时使用当前区域性。有一个nice article解释了这个以及这个设计决定背后的原因。
然后:
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>
答案 1 :(得分:0)
使用
datevar.ToShortDateString();
答案 2 :(得分:0)
(注意:Darin的答案非常适合MVC。我已经发布了这个以获取更多一般信息。)
但仍然打印“5/5/2012 12:00:00 AM”
是的,它会的。只是因为你解析了一个只有{,1}}值所知的日期的值。那是只是的日期和时间。如果您在其上调用DateTime
,则始终使用当前文化的默认格式。
我强烈建议你避免进行任何更多的字符串转换,而不是你必须的。尽可能早地解析该值,然后在内部将其保留为ToString
,直到您必须将其转换回字符串 - 要么在系统中使用,而该系统无法原生使用DateTime
(例如保存到文件中)或将其写回用户。
如果 要将其写回用户,则应确保为该用户使用适当的文化,并使用适当的格式字符串 - 例如DateTime
代表“短日期”。虽然您可以使用d
,但这不允许您指定文化,而ToShortDateString
会这样做:
ToString
在 向用户显示信息的任何地方,我强烈建议使用标准格式:“yyyy-MM-dd”表示日期,并且“yyyy-MM-dd'T 'HH:mm:ss.fffffffK“表示日期/时间值。 (后者由string text = date.ToString("d", culture);
标准格式字符串表示。)
请注意,日期格式确实非常重要。如果你给我看一个“08/07/2012”的网页,我不知道是8月7日还是7月8日。
答案 3 :(得分:0)
解析后请使用.ToShortDateString()
答案 4 :(得分:0)
您应该在视图中使用该代码:
item.mydate.Value.ToShortDateString()