Как увеличить дату?
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 21
- ОС: Debian
Как увеличить дату?
Например у меня в одной переменной сохранена дата в формате дд/мм/гггг, теперь мне надо в другую переменную записать теже данные, только прибавив скажем 15 дней. Как это можно грамотно сделать, что бы при необходимости менялся и месяц и год?
-
- Администратор
- Сообщения: 5403
- ОС: Gentoo
Re: Как увеличить дату?
Сначала преобразовать в стандартный формат. Например, YYYY-MM-DD. Чтобы от локали не зависело.
$ date +%Y-%m-%d -d '2010-05-12 + 21 days'
2010-06-02
Спасибо сказали:
-
- Сообщения: 21
- ОС: Debian
Re: Как увеличить дату?
Про формат ясно, спасибо. А вот то что ниже я совсем не понял, каким образом к date придавляется 21 день?
-
- Администратор
- Сообщения: 5403
- ОС: Gentoo
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Как увеличить дату?
программой date прибавляется.
документация:
$ info date
а реализацию смотрите в исходниках программы.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
я предпочитаю перевести в формат
%s seconds since 1970-01-01 00:00:00 UTC
потом прибавить/отнять нужное, а потом перевести обратно.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Зачем лишние движения?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
как обычно - это более универсальный способ. и более простой - ИМХО.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Как увеличить дату?
ой ли?
что раньше в /bin/date появилось? словесное выражение времени или то ли опция то ли команда „@“?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
для меня 1274394332 более просто. если потом это нужно складывать или вычитать. ИМХО.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
То для Вас, а не для date. И, с другой стороны, что проще: "21 days" или "21*24*60*60"? (;
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
может и так. я вообще стараюсь, что-бы мой код был более понятен для меня.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Как увеличить дату?
drBatty
ну да, в принципе, зависит от конечной цели.
если нужно получить дату (в каком-либо даже произвольном формате), а не цифры, то, imho, словесное выражение, понимаемое /bin/date-ом — самое то.
ну да, в принципе, зависит от конечной цели.
если нужно получить дату (в каком-либо даже произвольном формате), а не цифры, то, imho, словесное выражение, понимаемое /bin/date-ом — самое то.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Т.е. для Вас запись "date -d @$(( $(date +%s)+21*24*60*60 ))" понятнее, чем "date -d +21days"? Однако...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
конечно понятнее! тут речь идёт о секундах. А вот в альтернативном примере есть некие days, да и вообще непонятна сама запись 21days - ИМХО тут * пропущена, между 21 и константой days.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Не совсем понимаю, почему только секунды -- нечто само собой разумеещееся, а дни это "некие days". Впрочем после фразы "конечно понятнее!" диалог можно и не продолжать: мы всё равно друг друга не поймём.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 21
- ОС: Debian
Re: Как увеличить дату?
Вот таким макаром у меня вышло, а с date так и не разобрался. Напишите пожалуйста готовый пример, где к дате с одной переменной прибавляется 15 дней, а потом результат сохраняется в другой переменной, а то хоть убей не получается.
-
- Администратор
- Сообщения: 5403
- ОС: Gentoo
Re: Как увеличить дату?
Уже привёл. См. большой чёрный блок выше. Только замените 21 на 15, там 21 день прибавляется.
Спасибо сказали:
-
- Сообщения: 21
- ОС: Debian
Re: Как увеличить дату?
/dev/random писал(а): ↑24.05.2010 15:00
Уже привёл. См. большой чёрный блок выше. Только замените 21 на 15, там 21 день прибавляется.
Извиняюсь, и правда, все работает, только формат почему-то 10-05-25, а не 2010-05-25, нельзя исправить?
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Чтобы исправить, хорошо бы понять, что исправлять. Потому как приведенный вариант должен и так выводить правильно:Cetary писал(а): ↑25.05.2010 02:28Извиняюсь, и правда, все работает, только формат почему-то 10-05-25, а не 2010-05-25, нельзя исправить?/dev/random писал(а): ↑24.05.2010 15:00Уже привёл. См. большой чёрный блок выше. Только замените 21 на 15, там 21 день прибавляется.
Shell
$ date +%Y-%m-%d
2010-05-25
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 21
- ОС: Debian
Re: Как увеличить дату?
Вот код, на выходе дата в формате 10-05-25
Код: Выделить всё
var1=`date +%y-%m-%d'
add=15
var2=`date +%y-%m-%d -d "$var1 + $add days"`
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Вы разве не видите, что в приведенном примере буква Y заглавная?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 21
- ОС: Debian
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
вот уже написали:
только ту 21 день, и не в переменную. но это мелочи...
-
- Администратор
- Сообщения: 5403
- ОС: Gentoo
Re: Как увеличить дату?
Позволю себе немножко пофлеймить. Любители преобразовывать время в секунды, прибавьте-ка своим способом к дате 3 года. Чтобы месяц и число остались прежними. С учётом високосных лет. Или лучше так: прибавьте 3 месяца. Чтобы из 5 января получилось 5 апреля, а из 8 мая - 8 августа. С учётом разного количества дней в месяцах.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Как увеличить дату?
Добавлю насчёт секунд:
1. Секунда координации
2. Перевод летнего/зимнего времени
Особенно второй пункт проблемный.
1. Секунда координации
2. Перевод летнего/зимнего времени
Особенно второй пункт проблемный.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как увеличить дату?
/dev/random писал(а): ↑26.05.2010 06:43Позволю себе немножко пофлеймить. Любители преобразовывать время в секунды, прибавьте-ка своим способом к дате 3 года. Чтобы месяц и число остались прежними
это уже другая задача. а вообще тут разные результаты получаются, и на практике сложно сказать, чей способ правильный. конечно, для вычисления возраста ваш способ обычно верный, но не всегда... а в секунды переводить плохо ещё и из-за проблемы 2037го года :(
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Добавлю: при учёте високосных лет не забыть об особенностях григорианского календаря в отношении лет, кратных ста и тысяче. Это уж чтобы наверняка жизнь малиной не казалась. (:/dev/random писал(а): ↑26.05.2010 06:43Позволю себе немножко пофлеймить. Любители преобразовывать время в секунды, прибавьте-ка своим способом к дате 3 года. Чтобы месяц и число остались прежними. С учётом високосных лет. Или лучше так: прибавьте 3 месяца. Чтобы из 5 января получилось 5 апреля, а из 8 мая - 8 августа. С учётом разного количества дней в месяцах.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как увеличить дату?
Это -- другая. А вот упомянутый ниже переход на летнее время -- проблема, относящаяся именно к этой задаче.drBatty писал(а): ↑26.05.2010 07:57это уже другая задача./dev/random писал(а): ↑26.05.2010 06:43Позволю себе немножко пофлеймить. Любители преобразовывать время в секунды, прибавьте-ка своим способом к дате 3 года. Чтобы месяц и число остались прежними
Почему сложно сказать? В тех случаях, когда эти два способа покажут разные результаты, правильным будет способ, предоставляемый командой date (days, weeks и т.д.).
2038-го. Эта проблема не только перевода в секунды касается, она в принципе ещё не решена:
Shell
$ date -d +27years
вт май 26 2037 08:29:27 EEST
$ date -d +28years
date: invalid date `+28years'
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 355
- ОС: Gentoo
Re: Как увеличить дату?
У меня работает и +28 лет, и +29, и даже +1 000 000 000 лет. А вот +10 000 000 000 уже не работает.
// Проверил на ноутбуке. Не работает, возможная причина: на ноутбуке 32-битный Celeron, на рабочем компьютере — 64-битный Phenom.