Округление DateTime - PullRequest
       3

Округление DateTime

1 голос
/ 05 июня 2019

Для моего SteamBot я хочу сохранить дату и время, когда товар снова можно будет обменять.

Пример:

// DateNow = 05.06.2019 13:37:00
(+ 7 days due to Steam's trade policy)
// DateNow+7Days = 12.06.2019 13:37:00
// DateIneed = 13.06.2019 09:00:00

Так что мне нужно DateTimeэто CurrentDateTime + 7 дней + остаток до 9 часов

Вот как далеко я захожу:

var date = DateTime.Now.AddDays(7);

Есть ли какой-нибудь умный способ всегда получитьDateTime мне нужно?

Язык C #

Ответы [ 2 ]

6 голосов
/ 05 июня 2019

Вы можете проверить, не сегодня ли это до 9 часов, затем установить время на 9, иначе добавьте один день и установите время на 9, я думаю, это будет довольно просто.

var time = DateTime.Now;
var date = time.Hour <= 9
   ? time.Date.AddDays(7).AddHours(9) 
   : time.Date.AddDays(7).AddHours(9).AddDays(1);
0 голосов
/ 05 июня 2019

Поле DateTime.Date выставляет просто дату DateTime, затем вы можете добавить к этому произвольное значение TimeSpan, чтобы установить время объекта DateTime для чего угодно;

DateTime.Now.AddDays(7).Date.Add(new TimeSpan(9, 0, 0))

Проверьте это в действии здесь: https://dotnetfiddle.net/l3X37y


Учитывая, что время дня уже может быть после 9:00, возможно, что в итоге DateTime будет меньше 7 дней, чтобы противостоять этому, вы можете проверить, превышает ли время дня то, что вы собираетесь установить DateTime добавить и добавить день, если он есть, вот так;

DateTime dt = DateTime.Now.AddDays(7);
dt = dt.Date.Add(new TimeSpan(dt.Hour >= 9 ? 1 : 0, 9, 0, 0))

Смотрите это в действии здесь: https://dotnetfiddle.net/lfVGis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...