Consider splitting DateTime into a Date and Time type
The type SystemTime, which is being renamed to DateTime as part of !120 (merged), currently stores all its data (years, month, etc) as separate fields. In !120 (merged) I'm also strongly considering removing support for default arguments. This makes constructing a DateTime a bit more tricky when you only want to specify a subset of the data. For example, if you want to create a DateTime for 1980-01-01 00:00:00 you'd have to write this:
DateTime.new(year: 1980, month: 1, day: 1, hour: 0, minute: 0, second: 0, sub_second: 0.0, utc_offset: 0)
Adding all sorts of static
methods to this type leads to a clunky API. Instead, the following is much nicer:
let date = Date.new(year: 1980, month: 1, day: 1)
let time = Time.midnight
DateTime.new(date, time)
Another benefit is that we now have dedicated date and time types that only operate on a date or time; instead of both.