Arduino unixtime to datetime

Arduino unixtime to datetime

Simple general-purpose date/time class (no TZ / DST / leap seconds). More.

Public Types

Public Member Functions

DateTime (uint32_t t=SECONDS_FROM_1970_TO_2000) Constructor from Unix time. More. DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour=0, uint8_t min=0, uint8_t sec=0) Constructor from (year, month, day, hour, minute, second). More. DateTime (const DateTime &copy) Copy constructor. More. DateTime (const char *date, const char *time) Constructor for generating the build time. More. DateTime (const __FlashStringHelper *date, const __FlashStringHelper *time) Memory friendly constructor for generating the build time. More. DateTime (const char *iso8601date) Constructor for creating a DateTime from an ISO8601 date string. More. bool isValid () const Check whether this DateTime is valid. More. char * toString (char *buffer) const Writes the DateTime as a string in a user-defined format. More. uint16_t year () const Return the year. More. uint8_t month () const Return the month. More. uint8_t day () const Return the day of the month. More. uint8_t hour () const Return the hour. More. uint8_t twelveHour () const Return the hour in 12-hour format. More. uint8_t isPM () const Return whether the time is PM. More. uint8_t minute () const Return the minute. More. uint8_t second () const Return the second. More. uint8_t dayOfTheWeek () const Return the day of the week. More. uint32_t secondstime () const Convert the DateTime to seconds since 1 Jan 2000. More. uint32_t unixtime (void) const Return Unix time: seconds since 1 Jan 1970. More. String timestamp (timestampOpt opt=TIMESTAMP_FULL) const Return a ISO 8601 timestamp as a String object. More. DateTime operator+ (const TimeSpan &span) const Add a TimeSpan to the DateTime object. More. DateTime operator- (const TimeSpan &span) const Subtract a TimeSpan from the DateTime object. More. TimeSpan operator- (const DateTime &right) const Subtract one DateTime from another. More. bool operator (const DateTime &right) const Test if one DateTime is greater (later) than another. More. bool operator = (const DateTime &right) const Test if one DateTime is greater (later) than or equal to another. More. bool operator== (const DateTime &right) const Test if two DateTime objects are equal. More. bool operator!= (const DateTime &right) const Test if two DateTime objects are not equal. More.

Protected Attributes

uint8_t yOff
Year offset from 2000.
uint8_t m
Month 1-12.
uint8_t d
Day 1-31.
uint8_t hh
Hours 0-23.
uint8_t mm
Minutes 0-59.
uint8_t ss
Seconds 0-59.

Detailed Description

Simple general-purpose date/time class (no TZ / DST / leap seconds).

This class stores date and time information in a broken-down form, as a tuple (year, month, day, hour, minute, second). The day of the week is not stored, but computed on request. The class has no notion of time zones, daylight saving time, or leap seconds: time is stored in whatever time zone the user chooses to use.

The class supports dates in the range from 1 Jan 2000 to 31 Dec 2099 inclusive.

Member Enumeration Documentation

◆ timestampOpt

Format of the ISO 8601 timestamp generated by timestamp() . Each option corresponds to a toString() format as follows:

Constructor & Destructor Documentation

◆ DateTime() [1/6]

This builds a DateTime from an integer specifying the number of seconds elapsed since the epoch: 1970-01-01 00:00:00. This number is analogous to Unix time, with two small differences:

  • The Unix epoch is specified to be at 00:00:00 UTC, whereas this class has no notion of time zones. The epoch used in this class is then at 00:00:00 on whatever time zone the user chooses to use, ignoring changes in DST.
  • Unix time is conventionally represented with signed numbers, whereas this constructor takes an unsigned argument. Because of this, it does not suffer from the year 2038 problem.

If called without argument, it returns the earliest time representable by this class: 2000-01-01 00:00:00.

See also The unixtime() method is the converse of this constructor. Parameters

Enumerator
TIMESTAMP_FULL
t Time elapsed in seconds since 1970-01-01 00:00:00.

◆ DateTime() [2/6]

DateTime::DateTime ( uint16_t year,
uint8_t month,
uint8_t day,
uint8_t hour = 0 ,
uint8_t min = 0 ,
uint8_t sec = 0
)

Constructor from (year, month, day, hour, minute, second).

Warning If the provided parameters are not valid (e.g. 31 February), the constructed DateTime will be invalid. See also The isValid() method can be used to test whether the constructed DateTime is valid. Parameters

year Either the full year (range: 2000–2099) or the offset from year 2000 (range: 0–99).
month Month number (1–12).
day Day of the month (1–31).
hour,min,sec Hour (0–23), minute (0–59) and second (0–59).

◆ DateTime() [3/6]

DateTime::DateTime ( const DateTime & copy )

Parameters

copy DateTime to copy.

◆ DateTime() [4/6]

DateTime::DateTime ( const char * date,
const char * time
)

Constructor for generating the build time.

This constructor expects its parameters to be strings in the format generated by the compiler’s preprocessor macros __DATE__ and __TIME__ . Usage:

Note The F() macro can be used to reduce the RAM footprint, see the next constructor. Parameters

date Date string, e.g. «Apr 16 2020».
time Time string, e.g. «18:34:56».

◆ DateTime() [5/6]

DateTime::DateTime ( const __FlashStringHelper * date,
const __FlashStringHelper * time
)

Memory friendly constructor for generating the build time.

This version is intended to save RAM by keeping the date and time strings in program memory. Use it with the F() macro:

Parameters

date Date PROGMEM string, e.g. F(«Apr 16 2020»).
time Time PROGMEM string, e.g. F(«18:34:56»).

◆ DateTime() [6/6]

DateTime::DateTime ( const char * iso8601dateTime )

Constructor for creating a DateTime from an ISO8601 date string.

This constructor expects its parameters to be a string in the https://en.wikipedia.org/wiki/ISO_8601 format, e.g:

Note The year must be > 2000, as only the yOff is considered. Parameters

iso8601dateTime A dateTime string in iso8601 format, e.g. «2020-06-25T15:29:37».

Member Function Documentation

◆ isValid()

Check whether this DateTime is valid.

Returns true if valid, false if not.

◆ toString()

char * DateTime::toString ( char * buffer ) const

Writes the DateTime as a string in a user-defined format.

The buffer parameter should be initialized by the caller with a string specifying the requested format. This format string may contain any of the following specifiers:

specifier output
YYYY the year as a 4-digit number (2000–2099)
YY the year as a 2-digit number (00–99)
MM the month as a 2-digit number (01–12)
MMM the abbreviated English month name («Jan»–»Dec»)
DD the day as a 2-digit number (01–31)
DDD the abbreviated English day of the week («Mon»–»Sun»)
AP either «AM» or «PM»
ap either «am» or «pm»
hh the hour as a 2-digit number (00–23 or 01–12)
mm the minute as a 2-digit number (00–59)
ss the second as a 2-digit number (00–59)

If either «AP» or «ap» is used, the «hh» specifier uses 12-hour mode (range: 01–12). Otherwise it works in 24-hour mode (range: 00–23).

The specifiers within buffer will be overwritten with the appropriate values from the DateTime. Any characters not belonging to one of the above specifiers are left as-is.

Example: The format «DDD, DD MMM YYYY hh:mm:ss» generates an output of the form «Thu, 16 Apr 2020 18:34:56.

Источник

Arduino.ru

Высчитать дату, которая наступит через Х дней

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Есть ли какой-нибудь красивый способ для просчета даты, которая наступит через Х дней?

К примеру, сегодня 17 июня, и мне необходимо, чтобы, допустим, через 45 дней выполнилось какое-то действие.

На сколько я понимаю, нужно просчитать, какое число какого месяца будет через 45 дней, и сравнивать текущее число/месяц с высчитанным. Вопрос в том, как его высчитать. Поделитесь куском кода, пожалуйста. Буду благодарна :-)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Я тут посмотрела, что изнальный формат времени ds1307 — unix time. У меня стандартная библиотека для ds1307. Есть ли в ней нужная мне функция?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

функция называется unixtime() — показывает секунд с 1970 года обычно есть в стандарном классе DateTime

также в этом классе есть инициализатор

45дней = 45*24*60*60 секунд

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Видимо, у меня не совсем стандартная библиотека. Можете дать ссылку на ту библиотеку, которую Вы использовали (вызов функции rtc.now();)

А библиотека DateTime умеет конвертировать из unix time?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Люди, помогите пожалуйста. С паяльником плохо дружу, а плата уже разведена, i2c дисплей висит на a5 и a6, ds1307 на a3 и a4.

Я устанавливаю текущие время и дату, устанавливаю продолжительность работы устройства (оно подключено через реле) в днях. Мне нужно, чтоб устройство выключилось через заданный промежуток времени. В моей библиотеке для часов нет функции unixtime(). В библиотеке RTClib я не нашла, где можно изменить пины, к которым подключены часы.

Есть ли алгоритм для вычисления unix времени? Или, может, эту задачу можно решить еще как-то?

Не хочу просто вводить дату отключения, хочу вводить кол-во дней.

В гугле уже все ссылки поменяли цвет )))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как кастыль, можно попробобовать подключить библиотеку RTClib, но использовать только функции datetime, а общение с часами вести своей библиотекой.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

там недалеко и до

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Да зачем вам вообще эти даты и конвертации?

В чем вы время от своей библиотеки стандартной получаете? (кстати, вы так и не признались никому что же это за «стандартаня библиотке». пусть сами догадываются что у нее есть, а чего нет).

У нее есть «now(); // Returns the current time as seconds since Jan 1 1970»

Пофиг называется от unixtimestamp или нет. Пофиг с 1970 или с 2000-чного будет возвращать. Главное что «в секундах с какого-то момента» (на самом деле пофиг что в секундах. хоть в попугаях. главное что линейно и «цифра не может обнулиться/переполниться»).

Предположим что сейчас она нам вернула цифру «5555». А мы хотим что-бы у нас точ-то сработало «через 3 дня». Ну. переводим дни в секунды. 3*24*60*60=259200

Добавляем их в текущему времени: 5555+259200=264755

Все. Нам фиолетово «какая это дата». Нужно «сработать», когда now() вернет цифру 264755. А произойдет это — через три дня. Вне зависимости от того сколько дней в месяце, високосный год или нет и т.п.

Источник

Adblock
detector