8000 add · GyverLibs/UnixTime@f68344f · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Jun 13, 2024. It is now read-only.

Commit f68344f

Browse files
committed
add
1 parent 07a923e commit f68344f

File tree

5 files changed

+279
-0
lines changed

5 files changed

+279
-0
lines changed

README.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)
2+
![author](https://img.shields.io/badge/author-AlexGyver-informational.svg)
3+
# UnixTime
4+
Конвертер unix time stamp в дату и время и наоборот для Arduino. Основано на:
5+
- https://www.oryx-embedded.com/doc/date__time_8c_source.html
6+
- https://stackoverflow.com/questions/7960318/math-to-convert-seconds-since-1970-into-date-and-vice-versa
7+
8+
### Совместимость
9+
Совместима со всеми Arduino платформами (используются Arduino-функции)
10+
11+
## Содержание
12+
- [Установка](#install)
13+
- [Инициализация](#init)
14+
- [Использование](#usage)
15+
- [Пример](#example)
16+
- [Версии](#versions)
17+
- [Баги и обратная связь](#feedback)
18+
19+
<a id="install"></a>
20+
## Установка
21+
- Библиотеку можно найти по названию **UnixTime** и установить через менеджер библиотек в:
22+
- Arduino IDE
23+
- Arduino IDE v2
24+
- PlatformIO
25+
- [Скачать библиотеку](https://github.com/GyverLibs/UnixTime/archive/refs/heads/main.zip) .zip архивом для ручной установки:
26+
- Распаковать и положить в *C:\Program Files (x86)\Arduino\libraries* (Windows x64)
27+
- Распаковать и положить в *C:\Program Files\Arduino\libraries* (Windows x32)
28+
- Распаковать и положить в *Документы/Arduino/libraries/*
29+
- (Arduino IDE) автоматическая установка из .zip: *Скетч/Подключить библиотеку/Добавить .ZIP библиотеку…* и указать скачанный архив
30+
- Читай более подробную инструкцию по установке библиотек [здесь](https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA)
31+
32+
<a id="init"></a>
33+
## Инициализация
34+
```cpp
35+
UnixTime stamp(3); // указать GMT (например 3 для Москвы)
36+
```
37+
38+
<a id="usage"></a>
39+
## Использование
40+
```cpp
41+
uint32_t getUnix(); // получить unix stamp из установленной даты и времени
42+
void getDateTime(uint32_t t); // конвертировать unix stamp дату и время (в переменные члены класса)
43+
44+
// установка даты и времени (удобнее чем писать переменные вурчную)
45+
void setDateTime(uint16_t nyear, uint8_t nmonth, uint8_t nday, uint8_t nhour, uint8_t nminute, uint8_t nsecond);
46+
47+
// переменные даты и времени
48+
uint16_t year;
49+
uint8_t month;
50+
uint8_t day;
51+
uint8_t hour;
52+
uint8_t minute;
53+
uint8_t second;
54+
uint8_t dayOfWeek;
55+
```
56+
57+
<a id="example"></a>
58+
## Пример
59+
Остальные примеры смотри в **examples**!
60+
```cpp
61+
#include <UnixTime.h>
62+
63+
UnixTime stamp(3); // указать GMT (3 для Москвы)
64+
65+
void setup() {
66+
Serial.begin(9600);
67+
// ========= Дата и время в UNIX ==========
68+
// установка даты и времени библиотеки через функцию setDateTime
69+
// setDateTime(год, месяц (с 1), день (с 1), час, минута, секунда);
70+
// либо stamp.year = 2021 и так далее
71+
//stamp.setDateTime(2021, 1, 1, 0, 0, 0);
72+
stamp.setDateTime(2021, 5, 20, 7, 4, 15); // 20 мая 2021, 7:04:15
73+
74+
// getUnix() - получить unix время (выполняется ~56 us на AVR)
75+
uint32_t unix = stamp.getUnix();
76+
Serial.println(unix);
77+
78+
// ========= UNIX в дату и время ==========
79+
// конвертировать unix в дату и время
80+
// getDateTime(unix stamp) выполняется ~500 us на AVR
81+
// https://www.unixtimestamp.com/index.php
82+
stamp.getDateTime(1621497944);
83+
84+
// забираем вот так
85+
Serial.println(stamp.year);
86+
Serial.println(stamp.month);
87+
Serial.println(stamp.day);
88+
Serial.println(stamp.hour);
89+
Serial.println(stamp.minute);
90+
Serial.println(stamp.second);
91+
Serial.println(stamp.dayOfWeek); // 1 понедельник, 7 воскресенье
92+
}
93+
94+
void loop() {
95+
}
96+
```
97+
98+
<a id="versions"></a>
99+
## Версии
100+
- v1.0
101+
102+
<a id="feedback"></a>
103+
## Баги и обратная связь
104+
При нахождении багов создавайте **Issue**, а лучше сразу пишите на почту [alex@alexgyver.ru](mailto:alex@alexgyver.ru)
105+
Библиотека открыта для доработки и ваших **Pull Request**'ов!

examples/test/test.ino

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <UnixTime.h>
2+
3+
UnixTime stamp(3); // указать GMT (3 для Москвы)
4+
5+
void setup() {
6+
Serial.begin(9600);
7+
// ========= Дата и время в UNIX ==========
8+
// установка даты и времени библиотеки через функцию setDateTime
9+
// setDateTime(год, месяц (с 1), день (с 1), час, минута, секунда);
10+
// либо stamp.year = 2021 и так далее
11+
//stamp.setDateTime(2021, 1, 1, 0, 0, 0);
12+
stamp.setDateTime(2021, 5, 20, 7, 4, 15); // 20 мая 2021, 7:04:15
13+
14+
// getUnix() - получить unix время (выполняется ~56 us на AVR)
15+
uint32_t unix = stamp.getUnix();
16+
Serial.println(unix);
17+
18+
// ========= UNIX в дату и время ==========
19+
// конвертировать unix в дату и время
20+
// getDateTime(unix stamp) выполняется ~500 us на AVR
21+
// https://www.unixtimestamp.com/index.php
22+
stamp.getDateTime(1621497944);
23+
24+
// забираем вот так
25+
Serial.println(stamp.year);
26+
Serial.println(stamp.month);
27+
Serial.println(stamp.day);
28+
Serial.println(stamp.hour);
29+
Serial.println(stamp.minute);
30+
Serial.println(stamp.second);
31+
Serial.println(stamp.dayOfWeek); // 1 понедельник, 7 воскресенье
32+
}
33+
34+
void loop() {
35+
}

keywords.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#######################################
2+
# Syntax Coloring Map For UnixTime
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
UnixTime KEYWORD1
9+
10+
#######################################
11+
# Methods and Functions (KEYWORD2)
12+
#######################################
13+
getUnix KEYWORD2
14+
getDateTime KEYWORD2
15+
setDateTime KEYWORD2
16+
year KEYWORD2
17+
month KEYWORD2
18+
day KEYWORD2
19+
hour KEYWORD2
20+
minute KEYWORD2
21+
second KEYWORD2
22+
dayOfWeek KEYWORD2
23+
24+
#######################################
25+
# Constants (LITERAL1)
26+
#######################################

library.properties

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=UnixTime
2+
version=1.0
3+
author=AlexGyver <alex@alexgyver.ru>
4+
maintainer=AlexGyver <alex@alexgyver.ru>
5+
sentence=Unix time stamp to date time conversion and vice versa
6+
paragraph=Unix time stamp to date time conversion and vice versa
7+
category=Timing
8+
url=https://github.com/GyverLibs/UnixTime
9+
architectures=*

src/UnixTime.h

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
Конвертер unix time stamp в дату и время и наоборот для Arduino
3+
Документация:
4+
GitHub: https://github.com/GyverLibs/UnixTime
5+
6+
основано на https://www.oryx-embedded.com/doc/date__time_8c_source.html
7+
и https://stackoverflow.com/questions/7960318/math-to-convert-seconds-since-1970-into-date-and-vice-versa
8+
9+
AlexGyver, alex@alexgyver.ru
10+
https://alexgyver.ru/
11+
MIT License
12+
13+
Версии:
14+
v1.0 - релиз
15+
*/
16+
17+
#ifndef UnixTime_h
18+
#define UnixTime_h
19+
class UnixTime {
20+
public:
21+
// указать GMT
22+
UnixTime (int8_t gmt) {
23+
_gmt = gmt;
24+
}
25+
26+
// получить unix stamp из установленной даты и времени
27+
uint32_t getUnix() {
28+
int mdays[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
29+
int yearB = year;
30+
yearB -= 1970;
31+
int minusYear = 0;
32+
if (month >= 3) {
33+
yearB++;
34+
minusYear = 1;
35+
}
36+
return ( ( (day - 1 + mdays[month - 1] + ( ( yearB + 1 ) >> 2 ) - ( ( yearB + 69 ) / 100 ) + ( ( yearB + 369 ) / 100 / 4 ) + 365 * ( yearB - minusYear )) * 24ul + hour - _gmt) * 60ul + minute ) * 60ul + second;
37+
}
38+
39+
// конвертировать unix stamp дату и время (в переменные члены класса)
40+
void getDateTime(uint32_t t) {
41+
uint32_t a, b, c, d, e, f;
42+
int h, j, k;
43+
44+
t += _gmt * 3600;
45+
second = t % 60ul;
46+
t /= 60;
47+
minute = t % 60ul;
48+
t /= 60;
49+
hour = t % 24ul;
50+
t /= 24;
51+
52+
a = (uint32_t)((4ul * t + 102032) / 146097 + 15);
53+
b = (uint32_t)(t + 2442113 + a - (a / 4));
54+
c = (20 * b - 2442) / 7305;
55+
d = b - 365 * c - (c / 4);
56+
e = d * 1000 / 30601;
57+
f = d - e * 30 - e * 601 / 1000;
58+
59+
// январь и февраль как 13 и 14 месяцы
60+
if (e <= 13) {
61+
c -= 4716;
62+
e -= 1;
63+
} else {
64+
c -= 4715;
65+
e -= 13;
66+
}
67+
68+
year = c;
69+
month = e;
70+
day = f;
71+
72+
if (e <= 2) {
73+
e += 12;
74+
c -= 1;
75+
}
76+
j = c / 100;
77+
k = c % 100;
78+
h = f + (26 * (e + 1) / 10) + k + (k / 4) + (5 * j) + (j / 4); // Уравнение Зеллера
79+
dayOfWeek = ((h + 5) % 7) + 1;
80+
}
81+
82+
// установка даты и времени (удобнее чем писать переменные вурчную)
83+
void setDateTime(uint16_t nyear, uint8_t nmonth, uint8_t nday, uint8_t nhour, uint8_t nminute, uint8_t nsecond) {
84+
year = nyear;
85+
month = nmonth;
86+
day = nday;
87+
hour = nhour;
88+
minute = nminute;
89+
second = nsecond;
90+
}
91+
92+
// переменные даты и времени
93+
uint16_t year;
94+
uint8_t month;
95+
uint8_t day;
96+
uint8_t hour;
97+
uint8_t minute;
98+
uint8_t second;
99+
uint8_t dayOfWeek;
100+
101+
private:
102+
int8_t _gmt = 0;
103+
};
104+
#endif

0 commit comments

Comments
 (0)
0