Проблема Amazon MWS DateTime в зависимости от того, насколько - PullRequest
0 голосов
/ 06 февраля 2019

Я запрашиваю отчет у Amazon MWS, используя их SDK (https://developer.amazonservices.com/doc/bde/reports/v20090101/cSharp.html). Я звоню Запросить отчет (http://docs.developer.amazonservices.com/en_US/reports/Reports_RequestReport.html). Я должен указать дату начала и окончания. Проблема, с которой я сталкиваюсь:SDK не примет мой ввод DateTime, если инициализирован определенным образом, но выполняет другой путь, и я не могу понять, почему это так.

Вот мой код. Когда я инициализирую с использованием DateTime.Today.AddDays (-14) это НЕ работает. Когда я инициализирую, устанавливая конкретную дату, новый DateTime (2019, 1, 23) это работает. Когда я запускаю оба через LINQPad, структура выглядит одинаково для меня.

Закомментированный код не работает. Код сразу после делает.

MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
            config.ServiceURL = "https://mws.amazonservices.com";

            MarketplaceWebServiceClient service =
                new MarketplaceWebServiceClient(
                    ConfigurationManager.AppSettings["AWSAccessKey"],
                    ConfigurationManager.AppSettings["SecretKey"],
                    "Easy MWS Reports",
                    "1.0",
                    config);

            RequestReportRequest request = new RequestReportRequest();
            request.Merchant = ConfigurationManager.AppSettings["SellerId"];
            request.MarketplaceIdList = new IdList();
            request.MarketplaceIdList.Id = new List<string>( new string [] { ConfigurationManager.AppSettings["MarketplaceId"] } );

            request.ReportType = "_GET_AMAZON_FULFILLED_SHIPMENTS_DATA_";

            //request.StartDate = DateTime.Today.AddDays(-14);
            //request.EndDate = DateTime.Today;
            request.StartDate = new DateTime(2019, 1, 6);
            request.EndDate = new DateTime(2019, 2, 5);

            RequestReportResponse response = service.RequestReport(request); 

Действительно странная вещь, когда я проверяю объект запроса перед вызовом API, мои даты начала и окончания корректны. Когда я получаю этот ответназад Amazon сообщает мне, что мои даты начала и окончания - оба. Теперь. Это заставляет меня полагать, что объекты DateTime сериализуются по-разному в зависимости от того, как я их инициализирую, и что я не понимаюи.

[ОБНОВЛЕНИЕ] Я верю, что Эитамал прав, но, похоже, нет способа сделать это проще, чем то, на чем я остановился, а именно:

var then = DateTime.Today.AddDays(-15);
var now = DateTime.Today;
request.StartDate = new DateTime(then.Year, then.Month, then.Day);
request.EndDate = new DateTime(now.Year, now.Month, now.Day); 
...