2

とても奇妙です。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

次に、 「2012 年 5 月 5 日12:00:00 AM」と出力されます。2012 年 5 月 5 日のみを想定していました。

時間はいらないです。だから私は日付を解析しようとしました。

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

しかし、それでも「5/5/2012 12:00:00 AM」と出力されます

形式を「2012 年 5 月 5 日」に変更するにはどうすればよいですか?

どなたかご存知の方教えてください〜

ありがとうございました!

HTTP GET から取得した日時形式のデータを解析したいと考えています。

しかし、私は変わらず、また

[編集]

すべての回答と貴重な時間をありがとうございました! しかし、私はまだ問題があります。もう少し助けてください:)

まず、Linq で日付を使用して DB 日付を取得するため、文字列型ではなく DateTime 形式のデータが必要です。

私は試した、

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
...)

しかし、それは機能しません。

4

5 に答える 5

5

形式を「2012 年 5 月 5 日」に変更するにはどうすればよいですか?

最初に、常に yyyy-MM-ddGET リクエスト用の正しい形式を使用してパラメーターを渡す必要があります。

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>
于 2012-07-08T06:58:26.760 に答える
0

解析したら .ToShortDateString() を使用してください

于 2012-07-08T07:25:28.407 に答える
0

使用する

datevar.ToShortDateString();
于 2012-07-08T07:02:11.407 に答える
0

(注:ダーリンの答えは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.ffffffffK」です。日付/時刻の値。o(後者は、標準の書式文字列で表されます。)

日付の形式は非常に重要であることに注意してください。「2012 年 8 月 7 日」がオンになっている Web ページを表示すると、それが 8 月 7 日なのか 7 月 8 日なのかわかりません。

于 2012-07-08T07:09:04.257 に答える
0

ビューでそのコードを使用する必要があります。

item.mydate.Value.ToShortDateString()
于 2015-08-17T21:39:49.227 に答える