![]() |
Работа с датой, временем
Ну совсем дурная задача, то чего cmd (bat) не поддерживает: нужно из конкретной даты-времени вычесть дату 06/01/1980 00.00.00.
1) Нужно получить количество дней, недель и количество секунд с последней недели от начальной даты до конечной даты, начальная дата жестко фиксирована= 06/01/1980 00.00.00. Где 00.00.00 (ЧЧ.ММ.СС) Пример: 06/01/2011 00.00.00 - 06/01/1980 00.00.00 Решение: кол-во дней = 11315 (31 год / 365 дней), количество недель = 1616.428571428571 (11315 дней / 7 дней), количество секунд с последней недели = 259199.9 ( 0.428571428571*7 дней *24 часа * 3600 сек.) Может есть простенькая консольная утилитка для работы с датой и временем? |
Задача для PowerShell. Решается просто.
Цитата:
|
Код:
@Echo Off |
Проверил.
Отличное решение, но где-то есть ошибка, очень простая (то на 1 день ровно, то на 6 дней ровно, секунды - последние цифры - точные). Скорее всего связано с округлением в cmd (bat) до большего. А нужно не округлять, а оставлять только целую часть недели (Weeks). Контрольный пример: 22/05/2011 09:30:25 Точный результат должен быть: weeks=1637, SecondsFromWeek (секунды с начала новой недели №1637) = 34225 Где Set /a SecondsFromWeek=seconds - (weeks*7*24*3600) Программа выдает: Weeks=1636 SecondsFromWeek = 552625 |
Цитата:
Уточните, как следует считать дни? Например, от 06.01.1980 23.59.59 до 07.01.1980 00.00.00 сколько считать дней прошло, 1 или 0 ? Скрипт считает 0, если разница во времени менее 24 часов, а как надо? Цитата:
Цитата:
|
Цитата:
У вас полученный результат отличается на 86400 сек (1 день). Если не прошло 86400 сек с начала нового дня - то количество дней равно нулю (0). Цитата:
Поэтому с 06.01.1980 00.00.00 до 07.01.1980 00.00.00 прошел ровно 1 день. Я думаю что с днями все ок. Скорее всего проблема с неделями, я нечетко сформулировал что есть неделя (напр. если пошла неделя - 1638, то значение недели равно только целой части недели (напр. если неделя равна 1638.35465, то неделя берется равной 1638 ! А остаток недели это и есть секунды новой недели. Извиняюсь за сложность задачи. В любом случае спасибо за помощь. Вот проверка скрипта на PowerShell. Результат точный получается (Точный результат должен быть: weeks=1637, SecondsFromWeek (секунды с начала новой недели №1637) = 34225): Код:
$a = New-TimeSpan "05/22/2011 09:30:25" "06/01/1980 00:00:00" P.S. Скрипт очень нужен. |
Код:
@Echo Off |
1) Даты в том формате ddMMyyyy.
2) Правильная начальная дата: 06.01.1980 - (6 января) Решение неверное получается... по данному примеру: Контрольный пример: 06/01/1980 00.00.00 to 22/05/2011 09.30.25 Правильное решение... Цитата:
Ошибка ровно на один день (24 часа), возможно это как то связано с тем что GPS дни читаются так: 0,1,2,3,4,5,6 - все это 7 дней недели. Если вы прибавите ровно один день (86400 сек) все получится точно секунда в секунду, при этом неделя станет уже 1637. В любом случае спасибо за помощь. Просто в коде что-то где-то округляется не так. |
alexey_vf, поправил.
|
Надо бы сделать вставочку, т.к. время, иной раз, возвращается в 7 знаков (ведущий ноль заменяется пробелом)
"_2:47:56" => "02:47:56" В результате ошибка "Непарные скобки" на строке Set /a seconds=3600*(lessweeks*24+1%NewTime:~0,2%-1%OldTime:~0,2%) + 60*(1%NewTime:~3,2%-1%OldTime:~3,2%) + 1%NewTime:~6%-1%OldTime:~6% У себя сделал так (хотя можно было и попроще... но уж сделал) Код:
:CheckCmdStart |
Время: 17:56. |
Время: 17:56.
© OSzone.net 2001-