L4rs
L4rs

Reputation: 35

Round up DateTime

For my SteamBot I want to store the date and the time when the item is tradable again.

Example:

// 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

So the DateTime I need is CurrentDateTime + 7 Days + The rest to 9 o'clock

This is how far I come:

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

Is there any smart way to always get the DateTime I need?

Language is C#

Upvotes: 1

Views: 139

Answers (2)

Ilya Chernomordik
Ilya Chernomordik

Reputation: 30205

You can check if it is before 9 o'clock today, then set the time to 9, else add one day and set the time to 9, should be fairly easy I think.

var time = DateTime.Now;
var date = time.Hour <= 9
   ? time.Date.AddDays(7).AddHours(9) 
   : time.Date.AddDays(7).AddHours(9).AddDays(1);

Upvotes: 6

Prime
Prime

Reputation: 2482

The DateTime.Date field exposes just the date of a DateTime, you can then add an arbitrary TimeSpan to that to set the time of a DateTime object to whatever you want;

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

Check it out in action here: https://dotnetfiddle.net/l3X37y


Given the hour of the day may be past 9AM already, it's possible to end up with a DateTime less than 7 days, to counter this you can check if the hour of the day exceeds what you're going to set the DateTime to and add a day if it does, like so;

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

See this one in action here: https://dotnetfiddle.net/lfVGis

Upvotes: 0

Related Questions