| 51 | } |
| 52 | |
| 53 | uint64_t YYMMDDToSecondsSinceEpoch(uint32_t yymmdd) |
| 54 | { |
| 55 | auto constexpr partsCount = 3; |
| 56 | // From left to right YY MM DD. |
| 57 | std::array<int, partsCount> parts{}; // Initialize with zeros. |
| 58 | for (auto i = partsCount - 1; i >= 0; --i) |
| 59 | { |
| 60 | parts[i] = yymmdd % 100; |
| 61 | yymmdd /= 100; |
| 62 | } |
| 63 | ASSERT_EQUAL(yymmdd, 0, ("Version is too big.")); |
| 64 | |
| 65 | ASSERT_GREATER_OR_EQUAL(parts[1], 1, ("Month should be in range [1, 12]")); |
| 66 | ASSERT_LESS_OR_EQUAL(parts[1], 12, ("Month should be in range [1, 12]")); |
| 67 | ASSERT_GREATER_OR_EQUAL(parts[2], 1, ("Day should be in range [1, 31]")); |
| 68 | ASSERT_LESS_OR_EQUAL(parts[2], 31, ("Day should be in range [1, 31]")); |
| 69 | |
| 70 | std::tm tm{}; |
| 71 | tm.tm_year = parts[0] + 100; |
| 72 | tm.tm_mon = parts[1] - 1; |
| 73 | tm.tm_mday = parts[2]; |
| 74 | |
| 75 | return TimeTToSecondsSinceEpoch(TimeGM(tm)); |
| 76 | } |
| 77 | |
| 78 | uint64_t SecondsSinceEpoch() |
| 79 | { |