簡體   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