Вы не должны использовать метод ToString
по умолчанию для преобразования DateTime
в строку — это, вероятно, вызовет проблемы с глобализацией. Например, если вы запустите этот код в культуре en-US
(такой же, как на сервере), он должен работать нормально:
var parameters = new Dictionary<string, string>();
var start = new DateTime(2014, 4, 16, 0, 0, 0, DateTimeKind.Utc);
var end = new DateTime(2014, 6, 19, 0, 0, 0, DateTimeKind.Utc);
parameters.Add("start", start.ToString());
parameters.Add("end", end.ToString());
var t = MobileService.GetTable<TodoItem>();
var items = t.WithParameters(parameters).ToListAsync().Result;
Console.WriteLine(string.Join(", ", items));
Это приведет к отправке следующего запроса на сервер (добавлены разрывы строк и не экранирован URI для удобочитаемости):
GET /tables/TodoItem?
start=4/16/2014 12:00:00 AM
&end=6/19/2014 12:00:00 AM HTTP/1.1
Теперь, если вы запустите его в локали, где формат даты dd/MM/yyyy
, тогда запрос будет отправлен, как показано ниже, и эти значения не сопоставляются с DateTime
(нет месяца 16 или 19).
GET /tables/TodoItem?
start=16/4/2014 12:00:00 AM
&end=19/6/2014 12:00:00 AM HTTP/1.1
Что вы можете сделать, так это использовать универсальный формат (например, ISO 8601), чтобы независимо от культуры клиента сервер всегда получал дату в формате, который он понимает. В приведенном ниже коде показан пример этого.
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("pt-BR");
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("pt-BR");
var isoFormat = "yyyy-MM-dd'T'HH:mm:ss.fff'Z'";
var parameters = new Dictionary<string, string>();
var start = new DateTime(2014, 4, 16, 0, 0, 0, DateTimeKind.Utc);
var end = new DateTime(2014, 6, 19, 0, 0, 0, DateTimeKind.Utc);
parameters.Add("start", start.ToString(isoFormat, CultureInfo.InvariantCulture));
parameters.Add("end", end.ToString(isoFormat, CultureInfo.InvariantCulture));
var t = MobileService.GetTable<TodoItem>();
var items = t.WithParameters(parameters).ToListAsync().Result;
Console.WriteLine(string.Join(", ", items));
person
carlosfigueira
schedule
19.05.2014