Объявление связано с проблемой настройки - PullRequest
0 голосов
/ 07 февраля 2019

Этот код в консольной программе работает нормально

DateTime enteredDate = DateTime.Parse("2/2/2019 1:16:47 PM");
//change the time to 6pm
enteredDate = enteredDate.Date.Add(new TimeSpan(18, 00, 0));
Debug.WriteLine($"Entered date : {enteredDate}");
Debug.WriteLine($"FromFileTime: DateTime.FromFileTime(enteredDate.ToFileTime())}");

вывод равен

Entered date : 2/2/2019 6:00:00 PM
FromFileTime: 2/2/2019 6:00:00 PM

Когда я устанавливаю это время для атрибута AD, подобного этому

directoryEntry.Properties["accountExpires"].Value = Convert.ToString(enteredDate .ToFileTime());

это время записывается как 12:00:00 вместо 18:00.Что я делаю неправильно ?

1 Ответ

0 голосов
/ 07 февраля 2019

Я предполагаю, что это проблема часового пояса, а вы находитесь в часовом поясе UTC + 6.

Я не думаю, что у вас вообще есть проблема.Атрибут accountExpires хранит время в виде числа, которое «представляет число интервалов в 100 наносекунд с 1 января 1601 года (UTC)».Это именно то, что ToFileTime() делает для вас.Вы делаете это правильно.

Но учтите, что он хранится в UTC.Если вы видите это как 12:00 вечера, это, вероятно, потому что вы читаете это как время UTC.

6: 00 вечера ваше время 12:00 вечера UTC

...