Работа с датами и временем

Parameter Values

Parameter Description
format Required. Specifies the format to use. The following characters can be used in the format parameter string:
  • d — Day of the month; with leading zeros
  • j — Day of the month; without leading zeros
  • D — Day of the month (Mon — Sun)
  • l — Day of the month (Monday — Sunday)
  • S — English suffix for day of the month (st, nd, rd, th)
  • F — Monthname (January — December)
  • M — Monthname (Jan-Dec)
  • m — Month (01-12)
  • n — Month (1-12)
  • Y — Year (e.g 2013)
  • y — Year (e.g 13)
  • a and A — am or pm
  • g — 12 hour format without leading zeros
  • G — 24 hour format without leading zeros
  • h — 12 hour format with leading zeros
  • H — 24 hour format with leading zeros
  • i — Minutes with leading zeros
  • s — Seconds with leading zeros
  • u — Microseconds (up to six digits)
  • e, O, P and T — Timezone identifier
  • U — Seconds since Unix Epoch
  • (space)
  • # — One of the following separation symbol: ;,:,/,.,,,-,(,)
  • ? — A random byte
  • * — Rondom bytes until next separator/digit
  • ! — Resets all fields to Unix Epoch
  • | — Resets all fields to Unix Epoch if they have not been parsed yet
  • + — If present, trailing data in the string will cause a warning, not an error
time Required. Specifies a date/time string. NULL indicates the current date/time
timezone Optional. Specifies the timezone of time. Default is the current timezone

Установка компонентов даты

Следующие методы позволяют устанавливать компоненты даты и времени:


  • (устанавливает всю дату по миллисекундам с 01.01.1970 UTC)

Все они, кроме , обладают также UTC-вариантом, например: .

Как видно, некоторые методы могут устанавливать несколько компонентов даты одновременно, в частности, . При этом если какая-то компонента не указана, она не меняется. Например:

Автоисправление – очень удобное свойство объектов . Оно заключается в том, что можно устанавливать заведомо некорректные компоненты (например 32 января), а объект сам себя поправит.

Неправильные компоненты даты автоматически распределяются по остальным.

Например, нужно увеличить на 2 дня дату «28 февраля 2011». Может быть так, что это будет 2 марта, а может быть и 1 марта, если год високосный. Но нам обо всем этом думать не нужно. Просто прибавляем два дня. Остальное сделает :

Также это используют для получения даты, отдалённой от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:

Можно установить и нулевые, и даже отрицательные компоненты. Например:

Когда объект используется в числовом контексте, он преобразуется в количество миллисекунд:

Важный побочный эффект: даты можно вычитать, результат вычитания объектов – их временная разница, в миллисекундах.

Это используют для измерения времени:

Допустим, у нас есть несколько вариантов решения задачи, каждый описан функцией.

Как узнать, какой быстрее?

Для примера возьмём две функции, которые бегают по массиву:

Чтобы померить, какая из них быстрее, нельзя запустить один раз , один раз и замерить разницу. Одноразовый запуск ненадёжен, любая мини-помеха исказит результат.

Для правильного бенчмаркинга функция запускается много раз, чтобы сам тест занял существенное время. Это сведёт влияние помех к минимуму. Сложную функцию можно запускать 100 раз, простую – 1000 раз…

Померяем, какая из функций быстрее:

Теперь представим себе, что во время первого бенчмаркинга компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго – перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно

Гораздо более надёжные результаты можно получить, если весь пакет тестов прогнать много раз.

Более точное время с

В современных браузерах (кроме IE9-) вызов performance.now() возвращает количество миллисекунд, прошедшее с начала загрузки страницы. Причём именно с самого начала, до того, как загрузился HTML-файл, если точнее – с момента выгрузки предыдущей страницы из памяти.

Так что это время включает в себя всё, включая начальное обращение к серверу.


Его можно посмотреть в любом месте страницы, даже в , чтобы узнать, сколько времени потребовалось браузеру, чтобы до него добраться, включая загрузку HTML.

Возвращаемое значение измеряется в миллисекундах, но дополнительно имеет точность 3 знака после запятой (до миллионных долей секунды!), поэтому можно использовать его и для более точного бенчмаркинга в том числе.

и

Для измерения с одновременным выводом результатов в консоли есть методы:

  • – включить внутренний хронометр браузера с меткой.
  • – выключить внутренний хронометр браузера с меткой и вывести результат.

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

В коде ниже таймеры , – конкретные тесты, а таймер «All Benchmarks» – время «на всё про всё»:

При запуске этого примера нужно открыть консоль, иначе вы ничего не увидите.

Внимание, оптимизатор!

Современные интерпретаторы JavaScript делают массу оптимизаций, например:

  1. Автоматически выносят инвариант, то есть постоянное в цикле значение типа , за пределы цикла.
  2. Стараются понять, значения какого типа хранит данная переменная или массив, какую структуру имеет объект и, исходя из этого, оптимизировать внутренние алгоритмы.
  3. Выполняют простейшие операции, например сложение явно заданных чисел и строк, на этапе компиляции.
  4. Могут обнаружить, что некий код, например присваивание к неиспользуемой локальной переменной, ни на что не влияет и вообще исключить его из выполнения, хотя делают это редко.

Эти оптимизации могут влиять на результаты тестов, поэтому измерять скорость базовых операций JavaScript («проводить микробенчмаркинг») до того, как вы изучите внутренности JavaScript-интерпретаторов и поймёте, что они реально делают на таком коде, не рекомендуется.

Вставка текущей даты и времени.

В Microsoft Excel вы можете сделать это в виде статического или динамического значения.

Как вставить сегодняшнюю дату как статическую отметку.

Для начала давайте определим, что такое отметка времени. Отметка времени фиксирует «статическую точку», которая не изменится с течением времени или при пересчете электронной таблицы. Она навсегда зафиксирует тот момент, когда ее записали.

Таким образом, если ваша цель — поставить текущую дату и/или время в качестве статического значения, которое никогда не будет автоматически обновляться, вы можете использовать одно из следующих сочетаний клавиш:

  • Ctrl + ; (в английской раскладке) или Ctrl+Shift+4 (в русской раскладке) вставляет сегодняшнюю дату в ячейку.
  • Ctrl + Shift + ; (в английской раскладке) или Ctrl+Shift+6 (в русской раскладке)  записывает текущее время.
  • Чтобы вставить текущую дату и время, нажмите Ctrl + ; затем нажмите клавишу пробела, а затем Ctrl + Shift +;

Скажу прямо, не все бывает гладко с этими быстрыми клавишами. Но по моим наблюдениям, если при загрузке файла у вас на клавиатуре был включен английский, то срабатывают комбинации клавиш на английском – какой бы язык бы потом не переключили для работы. То же самое – с русским.

Как сделать, чтобы дата оставалась актуальной?

Если вы хотите вставить текущую дату, которая всегда будет оставаться актуальной, используйте одну из следующих функций:

  • =СЕГОДНЯ()- вставляет сегодняшнюю дату.
  • =ТДАТА()- использует текущие дату и время.

 В отличие от нажатия специальных клавиш, функции ТДАТА и СЕГОДНЯ всегда возвращают актуальные данные.

А если нужно вставить текущее время?

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

Если же далее на основе этого вы планируете производить какие-то вычисления, то тогда, возможно, вам будет лучше использовать формулу

В результате количество дней будет равно нулю, останется только время. Ну и формат времени все равно нужно применить.

При использовании формул имейте в виду, что:

  • Возвращаемые значения не обновляются непрерывно, они изменяются только при повторном открытии или пересчете электронной таблицы или при запуске макроса, содержащего функцию.
  • Функции берут всю информацию из системных часов вашего компьютера.

JS Учебник

JS ГлавнаяJS ВведениеJS УстановкаJS ВыводJS СинтаксисJS ЗаявленияJS КомментарииJS ПеременныеJS ОператорыJS АрифметикаJS ПрисваиванияJS Типы данныхJS ФункцииJS ОбъектыJS ОбластьJS СобытияJS СтрокиJS Методы строкJS ЧислаJS Методы чиселJS МассивыJS Методы массиваJS Сортировка массиваJS Итерация массиваJS ДатыJS Формат датыJS Метод получения датJS Методы набора…JS Математические…JS Случайные числаJS БулевыJS Сравнение…JS Заявления if…elseJS Заявление switchJS Цикл forJS Цикл whileJS Заявление break…JS Преобразование…JS Битовые…JS Регулярные выраженияJS ОшибкиJS ОтладчикJS ПодъемныйJS СтрогийJS Ключевое слово thisJS Руководство стиляJS ПрактикаJS Распространенные ошибкиJS ЭффективностьJS Зарезервированные словаJS ВерсииJS Версия ES5JS Версия ES6JS JSON

Форматы для различных значений одного выражения

Различные форматы для разных числовых значений

В выражении формата для чисел предусмотрено от одного до четырех разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от значения, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем значениям.
Два раздела Первый раздел применяется к положительным значениям и нулям, второй – к отрицательным значениям.
Три раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям.
Четыре раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям, четвертый – к значениям Null.

Пример использования четырех разделов в выражении формата числовых значений:

1 2 3 4 5 6 7 8 9 10


SubFormatDifferentValues()

MsgBox»Число 1234,5678:  «&_

Format(1234.5678,»#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null»)_

&vbNewLine&vbNewLine&»Число -25:  «&_

Format(-25,»#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null»)_

&vbNewLine&vbNewLine&»Число 0:  «&_

Format(,»#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null»)_

&vbNewLine&vbNewLine&»Null:  «&_

Format(Null,»#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null»)

EndSub

Различные форматы для разных строковых значений

В выражении формата для строк предусмотрено до двух разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от текста, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем строковым данным.
Два раздела Первый раздел применяется к строковым данным, второй – к значениям Null и пустым строкам (“”).

Пример использования двух разделов в выражении формата строк:

1 2 3 4 5 6 7 8 9 10

SubFormatString2()

MsgBox»Строка «Белка»:  «&_

Format(«Белка»,»@;Пустая строка или Null»)_

&vbNewLine&vbNewLine&»Пустая строка:  «&_

Format(«»,»@;Пустая строка или Null»)_

&vbNewLine&vbNewLine&»Строка «Null»:  «&_

Format(«Null»,»@;Пустая строка или Null»)_

&vbNewLine&vbNewLine&»Значение Null:  «&_

Format(Null,»@;Пустая строка или Null»)

EndSub

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Ослабление требований к точности совпадения

Модификатор (Fill Mode, «режим заполнения») в маске форматирования при вызове или используется для заполнения строки пробелами или нулями, чтобы обеспечить успешное прохождение проверки . Пример: 

TO_DATE ('07-1-94', 'FXfmDD-FXMM-FXYYYY')

Преобразование проходит успешно, потому что модификатор дополняет год 94 нулями, и тот превращается в 0094 (хотя трудно представить, чтобы вам когда-нибудь понадобилось делать что-то подобное). День 1 дополняется одним нулем и превращается в 01. Модификатор работает в режиме переключателя, как и .

Казалось бы, такое использование противоречит самой цели . Зачем использовать оба модификатора? Например, модификатор может применяться для принудительного использования конкретных ограничителей, тогда как ослабляет требование о вводе начальных нулей.

Точное совпадение маски форматирования

При преобразовании символьной строки в дату/время функции преобразования *обычно руководствуются несколькими предположениями:

  • Лишние пробелы в символьной строке игнорируются.
  • Числовые значения (например, день года) не обязаны включать начальные нули для заполнения маски.
  • Знаки препинания в преобразуемой строке могут просто совпадать со знаками препинания в маске по длине и позиции.

Такая гибкость очень удобна — до того момента, когда вы захотите ограничить пользователя или даже пакетный процесс от ввода данных в нестандартном формате. В некоторых ситуациях разделение дня и месяца символом «^» вместо дефиса («-») попросту недопустимо. В таких ситуациях можно включить в маску форматирования модификатор , чтобы потребовать точного совпадения между строкой и маской форматирования.

С модификатором какая-либо гибкость в интерпретации строки полностью отсутствует. Строка не может содержать лишние пробелы, если их нет в модели. Ее числовые значения должны включать начальные нули, если модель форматирования включает дополнительные цифры. Наконец, знаки препинания и литералы должны точно соответствовать знакам препинания и заключенному в кавычки тексту маски форматирования (не считая регистра символов, который всегда игнорируется). Все эти правила продемонстрированы в следующих примерах: 

TO_DATE ('1-1-4', 'fxDD-MM-YYYY')
TO_DATE ('7/16/94', 'FXMM/DD/YY')
TO_DATE ('JANUARY^1^ the year of 94', 'FXMonth-dd-"WhatIsaynotdo"yy')

PL/SQL выдает одну из следующих ошибок:

ORA-01861: literal does not match format string
ORA-01862: the numeric value does not match the length of the format item 

Однако следующий пример выполняется успешно, потому что регистр символов не учитывается, и модификатор этого факта не меняет:

TO_DATE ('Jan 15 1994', 'fxMON DD YYYY') 

Модификатор может задаваться в верхнем регистре, нижнем регистре или со смешением регистров; его действие от этого не изменяется.

Модификатор работает как переключатель и может многократно встречаться в маске форматирования. Пример: 

TO_DATE ('07-1-1994', 'FXDD-FXMM-FXYYYY')

Каждый раз, когда модификатор встречается в маске форматирования, происходит переключение. В приведенном примере точное совпадение обязательно для дня и года, но не для месяца.

Displaying Dates

JavaScript will (by default) output dates in full text string format:

When you display a date object in HTML, it is automatically converted to a string, with the method.

d = new Date(); document.getElementById(«demo»).innerHTML = d;

Same as:

d = new Date(); document.getElementById(«demo»).innerHTML = d.toString();

The method converts a date to a UTC string (a date display standard).

var d = new Date(); document.getElementById(«demo»).innerHTML = d.toUTCString();

The method converts a date to a more readable format:

var d = new Date(); document.getElementById(«demo»).innerHTML = d.toDateString();


The method converts a date to a string, using the ISO standard format:

Структура DateTime

Последнее обновление: 18.08.2016

Для работы с датами и временем в .NET предназначена структура DateTime. Она представляет дату и время от 00:00:00 1 января 0001 года до 23:59:59 31 декабря 9999 года.

Для создания нового объекта DateTime также можно использовать конструктор. Пустой конструктор создает начальную дату:

DateTime date1 = new DateTime();
Console.WriteLine(date1); // 01.01.0001 0:00:00

То есть мы получим минимально возможное значение, которое также можно получить следующим образом:

Console.WriteLine(DateTime.MinValue);

Чтобы задать конкретную дату, нужно использовать один из конструкторов, принимающих параметры:

DateTime date1 = new DateTime(2015, 7, 20); // год - месяц - день
Console.WriteLine(date1); // 20.07.2015 0:00:00

Установка времени:

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // год - месяц - день - час - минута - секунда
Console.WriteLine(date1); // 20.07.2015 18:30:25

Если необходимо получить текущую время и дату, то можно использовать ряд свойств DateTime:

Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTime.UtcNow);
Console.WriteLine(DateTime.Today);

Консольный вывод:

20.07.2015 11:43:33
20.07.2015 8:43:33
20.07.2015 0:00:00

Свойство берет текущую дату и время компьютера, — дата и время относительно времени по Гринвичу (GMT) и — только текущая дата.

При работе с датами надо учитывать, что по умолчанию для представления дат применяется григорианский календарь. Но что будет, если мы захотим получить день недели для 5 октября 1582 года:

DateTime someDate = new DateTime(1582, 10, 5);
Console.WriteLine(someDate.DayOfWeek);

Консоль выстветит значение Tuesday, то есть вторник. Однако, как может быть известно из истории, впервые переход с юлианского календаря на григорианский состоялся в октябре 1582 года. Тогда после даты 4 октября (четверг) (еще по юлианскому календарю) сразу перешли к 15 октября (пятница)(уже по григорианскому календарю). Таким образом, фактически выкинули 10 дней. То есть после 4 октября шло 15 октября.

В большинстве случаев данный факт вряд ли как-то повлияет на вычисления, однако при работе с очень давними датами данный аспект следует учитывать.

Операции с DateTime

Основные операции со структурой DateTime связаны со сложением или вычитанием дат. Например, надо к некоторой дате прибавить или, наоборот, отнять несколько дней.

Для добавления дат используется ряд методов:

  • : добавляет дату date

  • : добавляет к текущей дате несколько дней

  • : добавляет к текущей дате несколько часов

  • : добавляет к текущей дате несколько минут

  • : добавляет к текущей дате несколько месяцев

  • : добавляет к текущей дате несколько лет

Например, добавим к некоторой дате 3 часа:

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
Console.WriteLine(date1.AddHours(3)); // 20.07.2015 21:30:25

Для вычитания дат используется метод Substract(DateTime date):

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
DateTime date2 = new DateTime(2015, 7, 20, 15, 30, 25); // 20.07.2015 15:30:25
Console.WriteLine(date1.Subtract(date2)); // 03:00:00

Здесь даты различаются на три часа, поэтому результатом будет дата «03:00:00».

Метод Substract не имеет возможностей для отдельного вычитания дней, часов и так далее. Но это и не надо, так как мы можем передавать в метод AddDays() и другие методы добавления отрицательные значения:

// вычтем три часа
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25);  // 20.07.2015 18:30:25
Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25

Кроме операций сложения и вычитания еще есть ряд методов форматирования дат:

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25);
Console.WriteLine(date1.ToLocalTime()); // 20.07.2015 21:30:25
Console.WriteLine(date1.ToUniversalTime()); // 20.07.2015 15:30:25
Console.WriteLine(date1.ToLongDateString()); // 20 июля 2015 г.
Console.WriteLine(date1.ToShortDateString()); // 20.07.2015
Console.WriteLine(date1.ToLongTimeString()); // 18:30:25
Console.WriteLine(date1.ToShortTimeString()); // 18:30

Метод преобразует время UTC в локальное время, добавляя смещение относительно времени по Гринвичу. Метод , наоборот, преобразует локальное время во время UTC, то есть вычитает смещение относительно времени по Гринвичу. Остальные методы преобразуют дату к определенному формату.

НазадВперед


С этим читают