Другие языки программирования и технологии

Задачка для программистов

Как средствами Visual Basic или любой другой IDE конвертировать количество секунд с определенной даты в дату? Пример: Известна начальная дата - 01.01.1980 Известно количество секунд прошедших с начальной даты - 1235312566 Какая дата и время?
Василий Фокин
Василий Фокин
3 786
Sub Test()
Debug.Print DateAdd("S", 1235312566, "01.01.1980")
End Sub

Это в любой программе Microsoft Office можно сделать, на веб-страничке или создав файл с расширением VBS, только процедура вывода в тех случаях будет иная, а вот функция одна — DateAdd.

Ответ: 22.02.2019 14:22:46

Синтаксис

DateAdd(interval, number, date)

Синтаксис функции DateAdd содержит следующие именованные аргументы:

ЭлементОписание
intervalОбязательный. Строковое выражение, указывающее тип добавляемого временного интервала.
numberОбязательный. Числовое выражение, указывающее число временных интервалов, которое следует добавить. Оно может быть положительным (для получения более поздних дат) или отрицательным (для получения более ранних дат) .
dateОбязательный. Значение типа Variant (Date) или литерал даты, представляющий дату, к которой добавляется указанный временной интервал.
Значения

Ниже перечислены допустимые значения аргумента interval:

ЗначениеОписание
yyyyГод.
QКвартал.
mМесяц.
YДень года.
DДень месяца.
wДень недели.
wwНеделя.
HЧасы.
NМинуты.
SСекунды.
Дополнительные сведения

Функция DateAdd предназначена для добавления или вычитания указанного временного интервала из значения даты. Например, с помощью этой функции можно вычислить дату, на 30 дней более позднюю, чем текущая, или время, на 45 минут более позднее, чем текущее.
Для добавления дней к аргументу date можно задавать временной интервал как день года ("y"), день месяца ("d") или день недели ("w").
Функция DateAdd не возвращает неправильных дат. Следующее выражение добавляет один месяц к 31 января:

DateAdd("m", 1, "31-янв-95")

В данном случае будет возвращена дата 28-фев-95, а не 31-фев-95. Если в качестве аргумента date указать 31-янв-96, то возвращается дата 29-фев-96, поскольку 1996 год является високосным.

Если будет получена дата, более ранняя, чем 100 год (т. е. вычитаемый временной интервал содержит больше лет, чем исходное значение date), возникнет ошибка.

Если number не является значением типа Long, оно округляется до ближайшего целого числа перед выполнением операции.
АС
Александр Сергеевич
9 204
Лучший ответ
Василий Фокин Вот ты единственный, кто ответил мне так, как было необходимо!
Плюсую всем, чем могу!
Это решается в EXCEL и очень просто.
Макс Маленко
Макс Маленко
87 801
У тебя начальная дата - 01.01.1980. Время: 00:00:00. С этого момента прошло 1235312566 сек. Делим с остатком:
1. 1235312566/60 = 20588542 мин и 46 сек, дальше
2. 20588542/60 = 343142 час и 22 мин.
3. 343142/24 = 14297 сут и 14 час
Дальше сложнее
4. 14297/365 = 39 лет и 62 сут. На самом деле 52 сут, потому что 1980 г. был високосный, и после него за 39 лет было 10 високосных лет, поэтому надо отнять 10 сут.
Дальше Раскладываешь по месяцам:
5. 52 сут = 31+21 = 21 февраля
В итоге получаем: 21 февраля 2020 г, 14 час, 22 мин 46 сек.
Заметь, что 2020 - это 11-ый високосный год от 1980, но мы его не считаем, потому что конечное число - 21 февраля. Если бы было еще +10 сут, то мы бы посчитали 29 дней в феврале, и получили бы 2 марта.
делите число секунд.. . на минуты, часы, сутки...
Василий Фокин а дальше?
и какая дата получится в конце по вашему?
Вэл не забываем про високосные годы, переходы на зимнее/летнее время
Получить дату в виде FILETIME, с ней можно желать любые действия
DH
Daler Hasanov
2 702
детская задача делите число секунд
РШ
Роман Шешко
1 269
Василий Фокин минуты = делим секунды на 60
часы = делим секнуды на 60 и ещё на 60
дни = делим секнуды на 60 и ещё на 60 и ещё на 60

толк какой?
мне нужно знать полную дату, а не количество прошедших дней, часов, минут или секнуд...
23.02.2099
14часов 22минуты 46 сек ено если в 0:0:0