#c# #.net #datetime
#c# #.net #datetime
Вопрос:
У меня есть объект C # DateTime. Этот объект включает в себя как дату, так и время. Мне нужно передать эту информацию службе на основе REST. Мой вопрос в том, как мне отформатировать DateTime таким образом, чтобы я мог передать его через строку запроса и проанализировать его обратно в DateTime на стороне сервера?
DateTime startDate = GetStartDate();
string url = "http://www.mydomain.com/myservice.svc/[startDateGoesHere]
WebRequest request = HttpWebRequest.Create(url);
request.BeginGetResponse(new AsyncCallback(Service_Completed), request);
Спасибо,
Ответ №1:
Просто используйте toString() и передайте формат, например:
startDate.ToString("yyyyMMddHHmmss")
И проанализируйте его обратно с помощью DateTime.ParseExact()
Комментарии:
1. DateTime. ParseExact был «именно» тем, что мне было нужно. Каламбур не предназначен. Спасибо!
2. Рассмотрите возможность использования StartDate. Тики и новое время-дата (ticks) также
Ответ №2:
Для точности и согласованности вы могли бы использовать:
string utcDateOut = DateTime.UtcNow.ToString("s", CultureInfo.InvariantCulture);
DateTime utcDateIn = DateTime.ParseExact(utcDateOut, "s",
CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal);
Это даст вам формат, совместимый с ISO 8601, а использование UTC гарантирует отсутствие проблем с часовыми поясами и т.д.
Единственным недостатком является то, что это выглядит не так «красиво», как простое «ггггММдд».
Ответ №3:
Я бы использовал yyyyMMdd
в качестве формата; не обязательно кодировать URL, и его легко читать / понимать.
На стороне сервера вам пришлось бы вызвать DateTime.ParseExact(dateString, "yyyyMMdd")
, чтобы получить дату.
Надеюсь, это поможет.
Ответ №4:
строка s = DateTime
.toString(«ГГГГМДДХХМ МССФФФ«)
Примечание: fff равен миллисекундам (вы можете удалить ‘fff’, если он не нужен)
Затем преобразуйте его обратно в DateTime, используя
DateTime d = DateTime
.ParseExact(s, «ГГГГМДДХХММССФФФ«, CultureInfo
.Инвариантная культура)