30 #if JUCE_WINDOWS && JUCE_MINGW
31 auto now = (time_t) (millis / 1000);
38 if (_localtime64_s (&
result, &millis) != 0)
45 auto now = (time_t) (millis / 1000);
47 if (localtime_r (&now, &
result) ==
nullptr)
56 #if JUCE_WINDOWS && JUCE_MINGW
57 auto now = (time_t) (millis / 1000);
64 if (_gmtime64_s (&
result, &millis) != 0)
71 auto now = (time_t) (millis / 1000);
73 if (gmtime_r (&now, &
result) ==
nullptr)
85 return (
int) ((millis / 1000) - (
int64) mktime (&utc));
105 if (tm->tm_year < -1900 || tm->tm_year > 8099)
109 for (
size_t bufferSize = 256; ; bufferSize += 256)
115 strftime (buffer, bufferSize - 1,
format.toUTF8(), tm);
117 wcsftime (buffer, bufferSize - 1,
format.toWideCharPointer(), tm);
119 wcsftime (buffer, bufferSize - 1,
format.toUTF32(), tm);
122 if (numChars > 0 ||
format.isEmpty())
123 return String (StringType (buffer),
124 StringType (buffer) + (
int) numChars);
131 return (year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0));
136 const short dayOfYear[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
137 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
145 return 365 * year + (year / 400) - (year / 100) + (year / 4);
162 auto numYears = (11 -
month) / 12;
164 month += 12 * numYears;
174 return 24 * 3600 * (
daysFrom1970 (
t.tm_year + 1900,
t.tm_mon) + (
t.tm_mday - 1))
184 if (
const auto seconds = utcOffsetSeconds)
186 auto minutes = seconds / 60;
202 int hours,
int minutes,
int seconds,
int milliseconds,
203 bool useLocalTime)
noexcept
206 t.tm_year = year - 1900;
222 #if JUCE_WINDOWS && ! JUCE_MINGW
225 return ((
int64)
t.time) * 1000 +
t.millitm;
228 gettimeofday (&tv,
nullptr);
229 return ((
int64) tv.tv_sec) * 1000 + tv.tv_usec / 1000;
273 if (now >= targetTime)
276 auto toWait = (
int) (targetTime - now);
286 for (
int i = 10; --
i >= 0;)
307 bool use24HourClock)
const
326 << (mins < 10 ?
":0" :
":") << mins;
331 result << (secs < 10 ?
":0" :
":") << secs;
334 if (! use24HourClock)
362 if (hours == 0)
return 12;
363 if (hours <= 12)
return hours;
382 #if JUCE_WINDOWS && (JUCE_MSVC || JUCE_CLANG)
385 for (
int i = 0;
i < 2; ++
i)
387 char name[128] = { 0 };
395 auto zonePtr = (
const char**) tzname;
396 zone[0] = zonePtr[0];
397 zone[1] = zonePtr[1];
405 && zone[0].containsIgnoreCase (
"daylight")
406 && zone[0].contains (
"GMT"))
425 return String::formatted (includeDividerCharacters ?
"%04d-%02d-%02dT%02d:%02d:%06.03f"
426 :
"%04d%02d%02dT%02d%02d%06.03f",
440 for (
int i = numChars; --
i >= 0;)
442 auto digit = (
int) (*
t -
'0');
451 if (charToSkip != 0 && *
t == (
juce_wchar) charToSkip)
475 int hours = 0, minutes = 0, milliseconds = 0;
495 if (*
t ==
'.' || *
t ==
',')
500 if (milliseconds < 0)
504 milliseconds += 1000 * seconds;
507 auto nextChar =
t.getAndAdvance();
509 if (nextChar ==
'-' || nextChar ==
'+')
518 if (offsetMinutes < 0)
521 auto offsetMs = (offsetHours * 60 + offsetMinutes) * 60 * 1000;
522 milliseconds += nextChar ==
'-' ? offsetMs : -offsetMs;
524 else if (nextChar != 0 && nextChar !=
'Z')
529 return Time (year,
month - 1, day, hours, minutes, 0, milliseconds,
false);
542static const char*
const shortMonthNames[] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec" };
543static const char*
const longMonthNames[] = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December" };
555 static const char*
const shortDayNames[] = {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat" };
556 static const char*
const longDayNames[] = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday" };
560 return TRANS (threeLetterVersion ? shortDayNames [day]
561 : longDayNames [day]);
573bool operator== (
Time time1,
Time time2)
noexcept {
return time1.toMilliseconds() == time2.toMilliseconds(); }
574bool operator!= (
Time time1,
Time time2)
noexcept {
return time1.toMilliseconds() != time2.toMilliseconds(); }
575bool operator< (
Time time1,
Time time2)
noexcept {
return time1.toMilliseconds() < time2.toMilliseconds(); }
576bool operator> (
Time time1,
Time time2)
noexcept {
return time1.toMilliseconds() > time2.toMilliseconds(); }
577bool operator<= (
Time time1,
Time time2)
noexcept {
return time1.toMilliseconds() <= time2.toMilliseconds(); }
578bool operator>= (
Time time1,
Time time2)
noexcept {
return time1.toMilliseconds() >= time2.toMilliseconds(); }
582 for (
int i = 0;
i < 12; ++
i)
601 return Time (dateTokens[2].getIntValue(),
603 dateTokens[1].getIntValue(),
604 timeTokens[0].getIntValue(),
605 timeTokens[1].getIntValue());
620 void runTest()
override
624 Time
t = Time::getCurrentTime();
628 expect (Time::getCurrentTime() >
t);
630 expect (
t.getTimeZone().isNotEmpty());
631 expect (
t.getUTCOffsetString (
true) ==
"Z" ||
t.getUTCOffsetString (
true).length() == 6);
632 expect (
t.getUTCOffsetString (
false) ==
"Z" ||
t.getUTCOffsetString (
false).length() == 5);
634 expect (TimeHelpers::getUTCOffsetString (-(3 * 60 + 15) * 60,
true) ==
"-03:15");
635 expect (TimeHelpers::getUTCOffsetString (-(3 * 60 + 30) * 60,
true) ==
"-03:30");
636 expect (TimeHelpers::getUTCOffsetString (-(3 * 60 + 45) * 60,
true) ==
"-03:45");
638 expect (TimeHelpers::getUTCOffsetString ((3 * 60 + 15) * 60,
true) ==
"+03:15");
640 expect (Time::fromISO8601 (
t.toISO8601 (
true)) ==
t);
641 expect (Time::fromISO8601 (
t.toISO8601 (
false)) ==
t);
643 expect (Time::fromISO8601 (
"2016-02-16") == Time (2016, 1, 16, 0, 0, 0, 0,
false));
644 expect (Time::fromISO8601 (
"20160216Z") == Time (2016, 1, 16, 0, 0, 0, 0,
false));
646 expect (Time::fromISO8601 (
"2016-02-16T15:03:57+00:00") == Time (2016, 1, 16, 15, 3, 57, 0,
false));
647 expect (Time::fromISO8601 (
"20160216T150357+0000") == Time (2016, 1, 16, 15, 3, 57, 0,
false));
649 expect (Time::fromISO8601 (
"2016-02-16T15:03:57.999+00:00") == Time (2016, 1, 16, 15, 3, 57, 999,
false));
650 expect (Time::fromISO8601 (
"20160216T150357.999+0000") == Time (2016, 1, 16, 15, 3, 57, 999,
false));
651 expect (Time::fromISO8601 (
"2016-02-16T15:03:57.999Z") == Time (2016, 1, 16, 15, 3, 57, 999,
false));
652 expect (Time::fromISO8601 (
"2016-02-16T15:03:57,999Z") == Time (2016, 1, 16, 15, 3, 57, 999,
false));
653 expect (Time::fromISO8601 (
"20160216T150357.999Z") == Time (2016, 1, 16, 15, 3, 57, 999,
false));
654 expect (Time::fromISO8601 (
"20160216T150357,999Z") == Time (2016, 1, 16, 15, 3, 57, 999,
false));
656 expect (Time::fromISO8601 (
"2016-02-16T15:03:57.999-02:30") == Time (2016, 1, 16, 17, 33, 57, 999,
false));
657 expect (Time::fromISO8601 (
"2016-02-16T15:03:57,999-02:30") == Time (2016, 1, 16, 17, 33, 57, 999,
false));
658 expect (Time::fromISO8601 (
"20160216T150357.999-0230") == Time (2016, 1, 16, 17, 33, 57, 999,
false));
659 expect (Time::fromISO8601 (
"20160216T150357,999-0230") == Time (2016, 1, 16, 17, 33, 57, 999,
false));
661 expect (Time (1970, 0, 1, 0, 0, 0, 0,
false) == Time (0));
662 expect (Time (2106, 1, 7, 6, 28, 15, 0,
false) == Time (4294967295000));
663 expect (Time (2007, 10, 7, 1, 7, 20, 0,
false) == Time (1194397640000));
664 expect (Time (2038, 0, 19, 3, 14, 7, 0,
false) == Time (2147483647000));
665 expect (Time (2016, 2, 7, 11, 20, 8, 0,
false) == Time (1457349608000));
666 expect (Time (1969, 11, 31, 23, 59, 59, 0,
false) == Time (-1000));
667 expect (Time (1901, 11, 13, 20, 45, 53, 0,
false) == Time (-2147483647000));
669 expect (Time (1982, 1, 1, 12, 0, 0, 0,
true) + RelativeTime::days (365) == Time (1983, 1, 1, 12, 0, 0, 0,
true));
670 expect (Time (1970, 1, 1, 12, 0, 0, 0,
true) + RelativeTime::days (365) == Time (1971, 1, 1, 12, 0, 0, 0,
true));
671 expect (Time (2038, 1, 1, 12, 0, 0, 0,
true) + RelativeTime::days (365) == Time (2039, 1, 1, 12, 0, 0, 0,
true));
673 expect (Time (1982, 1, 1, 12, 0, 0, 0,
false) + RelativeTime::days (365) == Time (1983, 1, 1, 12, 0, 0, 0,
false));
674 expect (Time (1970, 1, 1, 12, 0, 0, 0,
false) + RelativeTime::days (365) == Time (1971, 1, 1, 12, 0, 0, 0,
false));
675 expect (Time (2038, 1, 1, 12, 0, 0, 0,
false) + RelativeTime::days (365) == Time (2039, 1, 1, 12, 0, 0, 0,
false));
679static TimeTests timeTests;
#define noexcept
Definition DistrhoDefines.h:72
float abs(const fft_t *freqs, off_t x)
Definition OscilGen.cpp:52
static String formatted(const String formatString,...)
Definition String.cpp:1747
Definition juce_CharPointer_UTF16.h:35
Definition juce_CharPointer_UTF32.h:35
Definition juce_CharPointer_UTF8.h:35
Definition juce_HeapBlock.h:87
Definition juce_RelativeTime.h:37
static RelativeTime milliseconds(int milliseconds) noexcept
Definition juce_RelativeTime.cpp:31
Definition juce_StringArray.h:35
void removeEmptyStrings(bool removeWhitespaceStrings=true)
Definition juce_StringArray.cpp:250
int addTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
Definition juce_StringArray.cpp:329
Definition juce_String.h:53
String substring(int startIndex, int endIndex) const
Definition juce_String.cpp:1498
Definition juce_StringRef.h:62
String::CharPointerType text
Definition juce_StringRef.h:130
static void JUCE_CALLTYPE yield()
Definition juce_posix_SharedCode.h:1033
static void JUCE_CALLTYPE sleep(int milliseconds)
Definition juce_posix_SharedCode.h:44
Definition juce_Time.h:37
bool isDaylightSavingTime() const noexcept
Definition juce_Time.cpp:373
static uint32 getApproximateMillisecondCounter() noexcept
Definition juce_Time.cpp:261
String getTimeZone() const
Definition juce_Time.cpp:378
String getUTCOffsetString(bool includeDividerCharacters) const
Definition juce_Time.cpp:418
int getHoursInAmPmFormat() const noexcept
Definition juce_Time.cpp:358
static Time fromISO8601(StringRef iso8601)
Definition juce_Time.cpp:457
int getMilliseconds() const noexcept
Definition juce_Time.cpp:356
String getWeekdayName(bool threeLetterVersion) const
Definition juce_Time.cpp:537
int getDayOfMonth() const noexcept
Definition juce_Time.cpp:351
int64 millisSinceEpoch
Definition juce_Time.h:374
static int64 currentTimeMillis() noexcept
Definition juce_Time.cpp:220
int getUTCOffsetSeconds() const noexcept
Definition juce_Time.cpp:413
int getMonth() const noexcept
Definition juce_Time.cpp:349
static Time JUCE_CALLTYPE getCurrentTime() noexcept
Definition juce_Time.cpp:233
static int64 getHighResolutionTicksPerSecond() noexcept
Definition juce_linux_SystemStats.cpp:329
String toString(bool includeDate, bool includeTime, bool includeSeconds=true, bool use24HourClock=false) const
Definition juce_Time.cpp:304
bool isAfternoon() const noexcept
Definition juce_Time.cpp:368
int getYear() const noexcept
Definition juce_Time.cpp:348
static Time getCompilationDate()
Definition juce_Time.cpp:592
static double highResolutionTicksToSeconds(int64 ticks) noexcept
Definition juce_Time.cpp:293
int getDayOfYear() const noexcept
Definition juce_Time.cpp:350
static int64 secondsToHighResolutionTicks(double seconds) noexcept
Definition juce_Time.cpp:298
String getMonthName(bool threeLetterVersion) const
Definition juce_Time.cpp:532
int getMinutes() const noexcept
Definition juce_Time.cpp:354
static void waitForMillisecondCounter(uint32 targetTime) noexcept
Definition juce_Time.cpp:267
String formatted(const String &format) const
Definition juce_Time.cpp:341
String toISO8601(bool includeDividerCharacters) const
Definition juce_Time.cpp:423
int getHours() const noexcept
Definition juce_Time.cpp:353
static uint32 getMillisecondCounter() noexcept
Definition juce_Time.cpp:241
int getSeconds() const noexcept
Definition juce_Time.cpp:355
int getDayOfWeek() const noexcept
Definition juce_Time.cpp:352
Definition juce_UnitTest.h:70
unsigned * m
Definition inflate.c:1559
struct huft * t
Definition inflate.c:943
register unsigned i
Definition inflate.c:1575
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
#define TRANS(stringLiteral)
Definition juce_LocalisedStrings.h:208
Definition juce_Time.cpp:27
static String getUTCOffsetString(int utcOffsetSeconds, bool includeSemiColon)
Definition juce_Time.cpp:182
static int64 daysFromYear0(int year) noexcept
Definition juce_Time.cpp:142
static Atomic< uint32 > lastMSCounterValue
Definition juce_Time.cpp:180
static int64 mktime_utc(const std::tm &t) noexcept
Definition juce_Time.cpp:172
static int getUTCOffsetSeconds(const int64 millis) noexcept
Definition juce_Time.cpp:80
static String formatString(const String &format, const std::tm *const tm)
Definition juce_Time.cpp:94
static bool isLeapYear(int year) noexcept
Definition juce_Time.cpp:129
static std::tm millisToUTC(int64 millis) noexcept
Definition juce_Time.cpp:54
static int extendedModulo(const int64 value, const int modulo) noexcept
Definition juce_Time.cpp:88
static std::tm millisToLocal(int64 millis) noexcept
Definition juce_Time.cpp:28
static int64 daysFrom1970(int year) noexcept
Definition juce_Time.cpp:148
static int daysFromJan1(int year, int month) noexcept
Definition juce_Time.cpp:134
Definition juce_UnitTestCategories.h:27
Definition carla_juce.cpp:31
uint32 juce_millisecondsSinceStartup() noexcept
Definition juce_linux_SystemStats.cpp:308
void zerostruct(Type &structure) noexcept
Definition juce_Memory.h:32
static const char *const longMonthNames[]
Definition juce_Time.cpp:543
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
unsigned int uint32
Definition juce_MathsFunctions.h:45
long long int64
Definition juce_MathsFunctions.h:54
wchar_t juce_wchar
Definition juce_CharacterFunctions.h:42
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
static int parseFixedSizeIntAndSkip(String::CharPointerType &t, int numChars, char charToSkip) noexcept
Definition juce_Time.cpp:436
static int getMonthNumberForCompileDate(const String &m)
Definition juce_Time.cpp:580
static const char *const shortMonthNames[]
Definition juce_Time.cpp:542
png_uint_32 length
Definition png.c:2247
Definition juce_Atomic.h:42
int n
Definition crypt.c:458
int result
Definition process.c:1455
typedef int(UZ_EXP MsgFn)()
static ZCONST char Far month[12][4]
Definition zipinfo.c:2243
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263
#define const
Definition zconf.h:137