# Время

Здесь описаны операторы и функции для работы с датами и временем (тип **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* возвращает номер дня в году у указанного времени.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/time.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
