Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc. http://www.blynk.cc/
Dependents: Blynk_RBL_BLE_Nano Blynk_MicroBit Blynk_Serial Blynk_RBL_BLE_Nano
BlynkDateTime.h
00001 /** 00002 * @file BlynkDateTime.h 00003 * @author Volodymyr Shymanskyy 00004 * @license This project is released under the MIT License (MIT) 00005 * @copyright Copyright (c) 2016 Volodymyr Shymanskyy 00006 * @date Aug 2016 00007 * @brief DateTime implementation 00008 * 00009 */ 00010 00011 #ifndef BlynkDateTime_h 00012 #define BlynkDateTime_h 00013 00014 typedef long blynk_time_t; 00015 00016 struct blynk_tm *blynk_gmtime_r(const blynk_time_t *time, struct blynk_tm *tm); 00017 blynk_time_t blynk_mk_gmtime(struct blynk_tm *tm); 00018 00019 struct blynk_tm { 00020 int8_t tm_sec; 00021 int8_t tm_min; 00022 int8_t tm_hour; 00023 int8_t tm_mday; 00024 int8_t tm_wday; 00025 int8_t tm_mon; 00026 int16_t tm_year; 00027 int16_t tm_yday; 00028 int16_t tm_isdst; 00029 }; 00030 00031 class BlynkTime { 00032 00033 public: 00034 static const uint32_t MAX_TIME = 86400L; 00035 00036 BlynkTime() : mTime(-1) {} 00037 00038 BlynkTime(const BlynkTime& t) : mTime(t.mTime) {} 00039 00040 BlynkTime(long seconds) : mTime(seconds % MAX_TIME) {} 00041 00042 BlynkTime(int hour, int minute, int second) 00043 { 00044 mTime = (hour * 3600 + minute * 60 + second) % MAX_TIME; 00045 } 00046 00047 int second() const { return mTime % 60; } 00048 int minute() const { return (mTime / 60) % 60; } 00049 int hour() const { return mTime / 3600; } 00050 00051 int hour12() const { 00052 int h = hour(); 00053 if (h == 0) 00054 return 12; // 12 midnight 00055 else if (h > 12) 00056 return h - 12; 00057 return h; 00058 } 00059 00060 bool isAM() const { return !isPM(); } 00061 bool isPM() const { return (hour() >= 12); } 00062 00063 void adjustSeconds(int sec) { 00064 if (isValid()) { 00065 mTime = (mTime + sec) % MAX_TIME; 00066 } 00067 } 00068 00069 blynk_time_t getUnixOffset() const { return mTime; } 00070 00071 bool isValid() const { return mTime < MAX_TIME; } 00072 operator bool() const { return isValid(); } 00073 00074 bool operator == (const BlynkTime& t) const { return mTime == t.mTime; } 00075 bool operator >= (const BlynkTime& t) const { return mTime >= t.mTime; } 00076 bool operator <= (const BlynkTime& t) const { return mTime <= t.mTime; } 00077 bool operator > (const BlynkTime& t) const { return mTime > t.mTime; } 00078 bool operator < (const BlynkTime& t) const { return mTime < t.mTime; } 00079 00080 private: 00081 uint32_t mTime; 00082 }; 00083 00084 class BlynkDateTime { 00085 00086 public: 00087 BlynkDateTime() : mTime(0) {} 00088 00089 BlynkDateTime(const BlynkDateTime& t) 00090 { 00091 mTime = t.mTime; 00092 blynk_gmtime_r(&mTime, &mTm); 00093 } 00094 00095 BlynkDateTime(blynk_time_t t) 00096 { 00097 mTime = t; 00098 blynk_gmtime_r(&mTime, &mTm); 00099 } 00100 00101 BlynkDateTime(int hour, int minute, int second, int day, int month, int year) 00102 { 00103 mTm.tm_hour = hour; 00104 mTm.tm_min = minute; 00105 mTm.tm_sec = second; 00106 00107 mTm.tm_mday = day; 00108 mTm.tm_mon = month - 1; 00109 mTm.tm_year = year - 1900; 00110 00111 mTm.tm_isdst = 0; 00112 00113 mTime = blynk_mk_gmtime(&mTm); 00114 } 00115 00116 int second() const { return mTm.tm_sec; } 00117 int minute() const { return mTm.tm_min; } 00118 int hour() const { return mTm.tm_hour; } 00119 int day() const { return mTm.tm_mday; } 00120 int month() const { return 1 + mTm.tm_mon; } 00121 int year() const { return 1900 + mTm.tm_year; } 00122 00123 int day_of_year() const { return 1 + mTm.tm_yday; } 00124 int day_of_week() const { return mTm.tm_wday == 0 ? 7 : mTm.tm_wday; } 00125 00126 /*int weak_of_year() const { 00127 int julian = day_of_year(); 00128 int dow = day_of_week(); 00129 int dowJan1 = BlynkDateTime(0,0,0, 1,1,year()).day_of_week(); 00130 int weekNum = ((julian + 6) / 7); 00131 if (dow < dowJan1) 00132 ++weekNum; 00133 return (weekNum); 00134 }*/ 00135 00136 int hour12() const { 00137 int h = hour(); 00138 if (h == 0) 00139 return 12; // 12 midnight 00140 else if (h > 12) 00141 return h - 12; 00142 return h; 00143 } 00144 00145 bool isAM() const { return !isPM(); } 00146 bool isPM() const { return (hour() >= 12); } 00147 00148 void adjustSeconds(int sec) { 00149 if (isValid()) { 00150 mTime += sec; 00151 blynk_gmtime_r(&mTime, &mTm); 00152 } 00153 } 00154 00155 //tm& getTm() { return mTm; } 00156 blynk_time_t getUnix() const { return mTime; } 00157 00158 bool isValid() const { return mTime != 0; } 00159 operator bool() const { return isValid(); } 00160 00161 bool operator == (const BlynkDateTime& t) const { return mTime == t.mTime; } 00162 bool operator >= (const BlynkDateTime& t) const { return mTime >= t.mTime; } 00163 bool operator <= (const BlynkDateTime& t) const { return mTime <= t.mTime; } 00164 bool operator > (const BlynkDateTime& t) const { return mTime > t.mTime; } 00165 bool operator < (const BlynkDateTime& t) const { return mTime < t.mTime; } 00166 00167 private: 00168 blynk_tm mTm; 00169 blynk_time_t mTime; 00170 }; 00171 00172 00173 #endif
Generated on Tue Jul 12 2022 15:11:11 by 1.7.2