Here I am showing my working as I may well be wrong.
Sometimes JUCE falls back from system functions to internal logic in Time calculations. It seems JUCE is overly cautious of using the system functions (which benefit from having more complete understanding of timezones).
As an aside the JUCE function also happens to use for it's timezone offset calculation the year 1971, which in the UK was a weird year (http://www.bbc.co.uk/news/uk-scotland-11643098) giving the UK a base UTC offset of +01:00 rather than +00:00. So we would prefer to use system functions where possible.
The functions below:
static struct tm millisToLocal (const int64 millis) noexcept; Time::Time (const int year, const int month, const int day, const int hours, const int minutes, const int seconds, const int milliseconds, const bool useLocalTime) noexcept;
only use the system functions before 12:00:00 am UTC, Friday, January 1, 2038. Most platforms have 64bit localtime functions now so we could extend this.
1. On OSX, linux etc:
Maximum time_t is [sizeof(time_t) == 8 ? INT64_MAX : INT_MAX] I think.
Maximum date is (32bit) 03:14:07 UTC, Tuesday, January 19, 2038 or (64bit) I have no idea.
2. On MSBuild:
Maximum date is (32bit) 03:14:07 January 19, 2038, UTC or (64bit) 23:59:59, December 31, 3000 UTC (See https://msdn.microsoft.com/en-us/library/bf12f0hc(v=vs.71).aspx).
So the maximum time_t is [sizeof(time_t) == 8 ? 32535215999LL : INT_MAX].
3. Other platforms I am not sure about but should be similar to Linux