DateTime does not directly calculate a new time. It just stores the elements in the object. There is no checking of values so you can get an invalid time.
You can use something like this:
DateTime alarm = DateTime ( now + 60); //Alarm 60 seconds in the future
DateTime future = DateTime ( now + TimeSpan(days, hours, minutes,seconds));
e.g. DateTime future = DateTime ( now + TimeSpan(1, 2, 3,4));
Gives these timestamps.
|21:25:12.243 -> Time is:|1602365100|2020-10-10T21:25:00|
|21:25:12.243 -> Future is:|1602458884|2020-10-11T23:28:04|
|21:25:13.214 -> Time is:|1602365101|2020-10-10T21:25:01|
|21:25:13.214 -> Future is:|1602458885|2020-10-11T23:28:05|
To handle TimeZones it is usually best to keep your system time as UTC then use a TimeZone library to display times in the chosen timezone.
I hope this helps.
Ted