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