> For the complete documentation index, see [llms.txt](https://ru.gentee.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ru.gentee.org/stdlib/time.md).

# Время

Здесь описаны операторы и функции для работы с датами и временем (тип **time**).

* [int( time t ) int](/stdlib/time.md#int-time-t-int)
* [time( int unixtime ) time](/stdlib/time.md#time-int-unixtime-time)
* [AddHours( time t, int hours ) time](/stdlib/time.md#addhours-time-t-int-hours-time)
* [Date( int year month day ) time](/stdlib/time.md#date-int-year-month-day-time)
* [DateTime( int year month day hour minute second ) time](/stdlib/time.md#datetime-int-year-month-day-hour-minute-second-time)
* [Days( time t ) int](/stdlib/time.md#days-time-t-int)
* [Format( str layout, time t ) str](/stdlib/time.md#format-str-layout-time-t-str)
* [Now( ) time](/stdlib/time.md#now-time)
* [ParseTime( str layout, str value ) time](/stdlib/time.md#parsetime-str-layout-str-value-time)
* [str( time t ) str](/stdlib/time.md#str-time-t-str)
* [UTC( time t ) time](/stdlib/time.md#utc-time-t-time)
* [Weekday( time t ) int](/stdlib/time.md#weekday-time-t-int)
* [YearDay( time t ) int](/stdlib/time.md#yearday-time-t-int)

## Типы

### time

Тип *time* имеет следующие поля:

* **int Year** - год
* **int Month** - месяц
* **int Day** - день месяца
* **int Hour** - часы
* **int Minute** - минуты
* **int Second** - секунды
* **bool UTC** - если равно *true*, то это UTC время, в противном случае, считается локальное время.

## Операторы

| Оператор         | Результат | Описание                                                                                       |
| ---------------- | --------- | ---------------------------------------------------------------------------------------------- |
| time **==** time | bool      | Возвращается *true*, если два времени равны и *false*, в противном случае.                     |
| time **>** time  | bool      | Возвращается *true*, если первое время больше чем второе и *false*, в противном случае.        |
| time **<** time  | bool      | Возвращается *true*, если первое время меньше чем второе и *false*, в противном случае.        |
| time **!=** time | bool      | Возвращается *true*, если два времени не равны и *false*, в противном случае.                  |
| time **>=** time | bool      | Возвращается *true*, если первое время больше или равно второму и *false*, в противном случае. |
| time **<=** time | bool      | Возвращается *true*, если первое время меньше или равно второму и *false*, в противном случае. |
| time **=** time  | time      | Оператор присваивания.                                                                         |

## Функции

### int(time t) int

Функция *int* конвертирует значение *time* в Unix время, количество секунд с 1 января 1970 UTC и возвращает его.

### time(int unixtime) time

Функция *time* конвертирует данное Unix время *unixtime*, количество секунд с 1 января 1970 UTC в структуру *time* и возвращает её.

### AddHours(time t, int hours) time

Функция *AddHours* возвращает новое время, соответствующее указанному, с добавлением *hours* часов. Параметр *hours* может быть отрицательным.

### Date(int year month day) time

Функция *Date* возвращает структуру типа *time* c указанной датой.

### DateTime(int year month day hour minute second) time

Функция *DateTime* возвращает структуру типа *time* c указанным локальным временем. Также, вы можете инициализировать переменную времени подобным образом

```
time t = {Year: 2018, Month: 12, Day: 12}
```

### Days(time t) int

Функция *Days* возвращает количество дней в месяце, в котором находится указанное время.

### Format(str layout, time t) str

Функция *Format* возвращает текстовое представление времени в соответствии со строкой *layout*. Функция берет строку токенов и заменяет их соответствующими значениями.

|                    | Токен | Вывод             |
| ------------------ | ----- | ----------------- |
| **Год**            | YYYY  | 2019              |
|                    | YY    | 19                |
| **Месяц**          | MMMM  | January           |
|                    | MMM   | Jan               |
|                    | MM    | 01..12            |
|                    | M     | 1..12             |
| **День**           | DD    | 01..31            |
|                    | D     | 1..31             |
| **День недели**    | dddd  | Monday            |
|                    | ddd   | Mon               |
| **AM/PM**          | PM    | AM PM             |
|                    | pm    | am pm             |
| **Час**            | HH    | 00..23            |
|                    | hh    | 01..12            |
|                    | h     | 1..12             |
| **Минута**         | mm    | 00..59            |
|                    | m     | 1..59             |
| **Секунда**        | ss    | 00..59            |
|                    | s     | 1..59             |
| **Временная зона** | tz    | MST               |
|                    | zz    | -0700 ... +0700   |
|                    | z     | -07:00 ... +07:00 |

### Now() time

Функция *Now* возвращает текущее локальное время.

### ParseTime(str layout, str value) time

Функция *ParseTime* разбирает отформатированную строку и возвращает соответствующее время. Список токенов такой же как в функции **Format**.

```
run str {
  time t &= ParseTime(`MMM D, YYYY at h:mmpm (zz)`, `Jun 7, 2019 at 6:05am (+0300)`)
  time t1 &= ParseTime(`YY/MM/DD HH:mm:s`, `19/05/29 03:21:3`)
  return Format(`YY/MM/DD HH:mm:ss zz`, UTC(t)) + Format(` YY/MM/DD HH:mm:ss`, UTC(t1))
}
// 19/06/07 03:05:00 +0000 19/05/29 03:21:03
```

### str(time t) str

Функция *str* конвертирует указанное время в строку формата **YYYY-MM-DD HH:mm:ss**.

### UTC(time t) time

Функция *UTC* конвертирует локальное время в UTC и возвращает новую структуру. Если время *t* уже было UTC, то возвращается его копия.

### Weekday(time t) int

Функция *Weekday* возвращает номер дня недели. 0 - воскресенье, 1 - понедельник и т.д.

### YearDay(time t) int

Функция *YearDay* возвращает номер дня в году у указанного времени.
