アプリケーションで非常に奇妙な動作をしています。サーバーはニューヨーク (-5 GMT タイムゾーン) にあり、クライアント - 私はルーマニア (+2 GMT タイムゾーン) にあるため、7 時間の不一致があります。私が直面している問題は、日付を保存しようとするときです。たとえば、12:00 (日は関係ありません) としましょう。クライアントは日付 12:00 のリクエストを送信し、12:00 はデータベースに到達しますが、サーバーを返します 19:00 の時間を返します。誰が日付を台無しにしているかを確認するためにローカルでデバッグしようとしましたが、サーバーとクライアントで同じ日付を持っているため、矛盾はありません。
これはサーバーに送信されるパラメーターです &startDate=07/25/2012%2012:00:00
これが結果です: 1343232000000 - エポックからの秒数 (コンバーターを使用する場合 - http://www.epochconverter.com/ - 日付が実際には 2012 年 7 月 25 日水曜日 19:00:00 であることがわかります)
ここにいくつかのコードスニペットがあります:
public static void GetProfessionalsHours(List<long> ids, out List<SalonProfessional> professionals)
{
professionals = new List<SalonProfessional>();
using (SqlConnection conn = new SqlConnection(DbConfig.ConnectionString))
{
using (
SqlCommand command = new SqlCommand("GetProfessionalsHours", conn) { CommandType = CommandType.StoredProcedure })
{
conn.Open();
command.Parameters.AddWithValue("professionalIDs", ids.CommaSeparated());
using (IDataReader reader = command.ExecuteReader())
{
//get normal schedule
while (reader.Read())
{
professionals.Add(SalonProfessional.GetSalonProfessional(reader));
}
reader.NextResult();
while (reader.Read())
{
professionals.Find(p => p.ID == reader.GetInt64(1)).Hours.Add(ProfessionalHours.GetProfessionalHour(reader));
}
//get overriden hours
reader.NextResult();
while (reader.Read())
{
professionals.Find(p => p.ID == reader.GetInt64(1)).OverriddenHours.Add(ProfessionalOverriddenHour.GetProfessionalOverriddenHour(reader));
}
}
}
}
}
public static ProfessionalOverriddenHour GetProfessionalOverriddenHour(IDataReader reader)
{
return new ProfessionalOverriddenHour()
{
ID = reader.GetInt64(0),
ProfessionalId = reader.GetInt64(1),
StartDate = reader.GetDateTime(2),
EndDate = reader.GetDateTime(3),
};
}
public JsonResult CalendarData(List<long> professionalIDs, CalendarData calendarData)
{
AjaxResponse response = new AjaxResponse();
response.Success = true;
CalendarDataResponseObject responseData = new CalendarDataResponseObject();
response.Content = responseData;
try
{
List<SalonProfessional> professionals = null;
CalendarOperations.GetProfessionalsHours(professionalIDs, out professionals);
responseData.Professionals = professionals;
}
catch (Exception ex)
{
response.Success = true;
response.ErrorMessage = "Could not retrieve calendar data";
ExceptionsOperations.LogException(ex, "Could not retrieve calendar data");
}
return Json(response, JsonRequestBehavior.AllowGet);
}
問題は、ProfessionalOverriddenHour オブジェクトの StartDate と EndDate にあります。