Fullcalendar jquery プラグインを使用して、MVC 4 アプリケーションのカレンダー ビューにイベントを表示しています。
Unix タイムスタンプ形式で現在のビューに表示されている開始日と終了日を表す 2 つの double パラメーターを渡すコントローラー アクションを正しく呼び出すプラグインを構成しました。
ここで、私のコントローラーアクションメソッドを見ることができます
[HttpPost]
public ActionResult GetEvents( double start, double end ) {
DateTime dtStart = DateTimeUtils.UnixTimeStampToDateTime( start );
DateTime dtEnd = DateTimeUtils.UnixTimeStampToDateTime( end );
IPolicyRepository _pRepo = _uow.PolicyRepository;
IEnumerable<Policy> model =
_pRepo.Find( p => p.EndDate >= dtStart.Date && p.EndDate < dtEnd.Date );
...
}
このメソッドDateTimeUtils.UnixTimeStampToDateTime(double)
は、次の方法で日時オブジェクトの UNIX タイムスタンプを変換します。
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp ) {
// Unix timestamp is seconds past epoch
DateTime dtDateTime = new DateTime( 1970, 1, 1, 0, 0, 0, 0 );
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
}
ただし、Find
ラムダをEFに渡すだけのリポジトリのメソッドは、いくつかの行が存在する場合でも行を返しません。この問題は、ブラウザとデータベース サーバー間のフォーマットやロケールの違いが原因ではないかと考えています。
この問題を解決し、使用されているロケールと特定の形式を認識するクエリを作成するにはどうすればよいですか?
編集:詳細については、ここにモデル定義を追加しています
public partial class Policy
{
public int PolicyID { get; set; }
[...]
[Required]
[DisplayName( "Begin date" )]
[DisplayFormat( ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}" )]
public DateTime BeginDate { get; set; }
[Required]
[DisplayName( "Due Date" )]
[DisplayFormat( ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}" )]
public DateTime EndDate { get; set; }
}