Короткий ответ на оба: вы не можете, и вы все равно не должны. Вы должны проверить свои инструменты в своей системе управления исходным кодом и загрузить его в своих установщиках из проверки. Таким образом, у вас есть контроль над версиями, которые вы распространяете, вместо того, чтобы выбирать произвольные версии из GAC.
Примечание: DiskId и Vital по умолчанию имеют значения, которые вы даете, поэтому вы можете сохранить некоторую типизацию только опуская их.
Примечание читателям: Несколько комментаторов указали на некоторые проблемы в этом ответе (связанный особенно с первым предложением). Обратитесь к разделу комментариев для получения дополнительной информации.
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
Это дает Вам дату, подобную [1 112] 2008-09-22T13:57:31.2311892-04:00.
Иначе:
DateTime.UtcNow.ToString("o");
, который дает Вам 2008-09-22T14:01:54.9571247Z
Для получения указанного формата, можно использовать:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
Преобразовать DateTime. UtcNow к строковому представлению yyyy-MM-ddTHH:mm:ssZ, можно использовать ToString () метод структуры DateTime с пользовательской строкой форматирования. При использовании пользовательских строк формата с DateTime важно помнить, что необходимо выйти разделителей с помощью одинарных кавычек.
следующее возвратит строку represention, Вы хотели:
DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", DateTimeFormatInfo.InvariantInfo)
DateTime.UtcNow.ToString("s")
Возвраты что-то как 2008-04-10T06:30:00
UtcNow
, очевидно, возвращается время UTC , таким образом, нет никакого вреда в:
string.Concat(DateTime.UtcNow.ToString("s"), "Z")
DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
должен дать Вам, что Вы ищете, поскольку "s" спецификатор формата описан как поддающийся сортировке шаблон даты/времени; соответствует ISO 8601.
Как упомянуто в другом ответе, DateTime
имеет выпуски дизайном.
я предлагаю использовать NodaTime для управления датой/временными стоимостями:
Так, для создания и формат ZonedDateTime
можно использовать следующий фрагмент кода:
var instant1 = Instant.FromUtc(2020, 06, 29, 10, 15, 22);
var utcZonedDateTime = new ZonedDateTime(instant1, DateTimeZone.Utc);
utcZonedDateTime.ToString("yyyy-MM-ddTHH:mm:ss'Z'", CultureInfo.InvariantCulture);
// 2020-06-29T10:15:22Z
var instant2 = Instant.FromDateTimeUtc(new DateTime(2020, 06, 29, 10, 15, 22, DateTimeKind.Utc));
var amsterdamZonedDateTime = new ZonedDateTime(instant2, DateTimeZoneProviders.Tzdb["Europe/Amsterdam"]);
amsterdamZonedDateTime.ToString("yyyy-MM-ddTHH:mm:ss'Z'", CultureInfo.InvariantCulture);
// 2020-06-29T12:15:22Z
Для меня NodaTime
код выглядит довольно подробным. Но типы действительно полезны. Они помогают обработать дату/временные стоимости правильно.
Для использования
NodaTime
сNewtonsoft.Json
необходимо добавить ссылку наNodaTime.Serialization.JsonNet
пакет NuGet и настроить опции JSON.
services
.AddMvc()
.AddJsonOptions(options =>
{
var settings=options.SerializerSettings;
settings.DateParseHandling = DateParseHandling.None;
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
});