LINUX.ORG.RU

Переведите в дату UTS и далее простая арифметика. Полученный результат переведите из UTS во что хотите.

anonymous
()

1. Перевести в дату в формате UNIX (эпохи). Это количество секунд от 01.01.1970 00:00:00 UTC

2. Отнять из этого числа 86400*30

3. Перевести обратно в нужный формат

Как-то так.

Пример скрипта, манипулирующего датой по такому принципу: http://pastebin.com/Nvux25kg

(В данном случае прибавляет 9 недель к дате православной Пасхи, и на выходе года, где полученная дата — 22 Июня).

Infra_HDC ★★★★★
()
Последнее исправление: Infra_HDC (всего исправлений: 1)

Если вызов внешней программы допускается, то вот «двух-сторочник» на Go, читающий дату из stdin и возвращающий минус 30 дней в нужном формате:

package main

import (
        "bufio"
        "fmt"
        "log"
        "os"
        "time"
)

const format = "2006_01_02-15-04-05\n"

func main() {
        reader := bufio.NewReader(os.Stdin)
        line, _ := reader.ReadString('\n')
        date, err := time.Parse(format, line)
        if err != nil {
                log.Fatal(err)
        }
        fmt.Print(date.AddDate(0, 0, -30).Format(format))
}
$ echo 1997_03_01-15-30-00 | ./monthago
1997_01_30-15-30-00
beastie ★★★★★
()
Ответ на: комментарий от Deleted

Да, если дата текущая, то так действительно проще. Спасибо за подсказку.

Infra_HDC ★★★★★
()

Всем большое спасибо!

virtus
() автор топика
Ответ на: комментарий от beastie

Быстро, точно и сердито

быстро, точно и сердито набрать

date --help
а у Вас, сыночка, юношеский всплеск гормонов.

novitchok ★★★★★
()
Ответ на: комментарий от novitchok
$ date --help
date: unknown option -- -
usage: date [-aju] [-d dst] [-r seconds] [-t minutes_west] [-z output_zone]
            [+format] [[[[[[cc]yy]mm]dd]HH]MM[.SS]]

Да, дедушка. ;)

beastie ★★★★★
()
Ответ на: комментарий от beastie
date --help
Использование: date [КЛЮЧ]… [+ФОРМАТ]
       или:    date [-u|--utc|--universal] [ММДДччмм[[ВВ]ГГ][.сс]]
Выводит текущее время в заданном ФОРМАТЕ, или изменяет время в системе.

Аргументы, обязательные для длинных ключей, обязательны и для коротких.
  -d, --date=СТРОКА         показать не текущее время, а время, описанное
                            заданной СТРОКОЙ
и прочее blah-blah-blah, которое мы не будем сюда копипастить.

я в курсе отличия гнутого date, от bsd, но ещё раз повторяю, сыночка, не стоит городить вильсипет там, где его не стоит городить;)

novitchok ★★★★★
()
Ответ на: комментарий от novitchok

В моём «велосипеде» однако одно маленькое преимущество: он парзит и выдаёт дату в нужном формате. Хотя, судя по ТЗ, это наверно не суть важно. Просто один из вариантов.

beastie ★★★★★
()
Ответ на: комментарий от novitchok

А такой лисапед дедушка одобрит? ;)

perl -e 'print localtime(time-2592000)."\n";'

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.