LINUX.ORG.RU

Разность двух дат


0

1

Есть две даты в формате «<Месяц> <День_недели> <Число> <Время>»(последовательность выбираю я). Надо найти сколько секунд от одной даты до другой. Я думал с помощью date -d +%s но не знаю как сказать ему, что мне нужен именно этот день недели. В таком формате date считает до «<Месяц> <Число> <Время>» игнорируя день недели. Как это можно сделать используя bash?

Что такое число? Если это число месяца, то зачем день недели? Получится избыточная информация.

vurdalak ★★★★★ ()

реквестирую [вещества]

08-11-2011 это по вашему среда?

<11> <08> <понедельник> - <11> <08> <воскресенье> === НЁХ.

Или год сам выбирается? Тогда ищите год...

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

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

Или я чего-то не понимаю?

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

>Забыл дописать: одна дата - текущая, а для второй - ближайшая подходящая под условие(год произвольный >= текущего).

тогда вам надо читать man/source программы cal

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

Зачем так сложно Находим JD для текущего момента, Подбираем год для юлианского дня. Вычисляем JD для найденной 2-й точки. считаем дельту.

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

од из этого определить невозможно, потому что конкретное совпадение даты и дня недели бывает в разные годы. Ну можно найти минимальный год больше текущего. А так - да годов с совпадением числа-месяца-дня недели будет много ~ раз в 12 лет

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

>Зачем так сложно Находим JD для текущего момента, Подбираем год для юлианского дня. Вычисляем JD для найденной 2-й точки. считаем дельту.

можно и так конечно. Действительно - подбирать обычно недолго.

drBatty ★★ ()

Как-то, надо было посчитать количество дней между датами, я такое сделал:

#!/usr/bin/python

from sys import argv
import time, datetime

if __name__ == '__main__':

    if len(argv) < 2:
        print("Usage: sumofdays.py [ space separated list of dates in day.month.year format ]\
        \nExample: sumofdays.py \"26.08.1986 31.05.1988 01.06.1988 10.01.1990 18.02.1991 13.07.1992 01.08.1992 31.01.1993 16.03.1993 04.05.1993 21.05.1993 10.10.1993 23.10.1993 01.08.1994 05.08.1994 19.03.1995 28.12.1997 30.12.1997\"")
        exit(0)

    time_format = "%d.%m.%Y"

    dates=[]
    datesstring = argv[1]
    listofdatestrings = datesstring.split(" ")

    for date_string in listofdatestrings:
        dates.append(datetime.datetime.fromtimestamp(time.mktime(time.strptime(date_string, time_format))))


    id = len(dates)-1
    sum = datetime.timedelta(0)

    while( id > 0 ):
        sum += dates[id] - dates[id-1]
        id -= 2

    print(sum)

Bad_ptr ★★★★ ()
#!/bin/sh

export LC_TIME="C"

# week day
WDAY="$1"

#month day
MDAY="$2"

#month
MONTH="$3"

#time HH:MM
TIME="$4"

# year (current if empty)
YEAR="$5"

# get current year
YEAR=`date -d "$WDAY $MONTH $MDAY $TIME $YEAR" | awk '{print $NF}'`

# get real week day for current year
RWDAY=`date -d "$WDAY $MONTH $MDAY $TIME $YEAR" | awk '{print $1}'`

# looking for year suitable for requested date
while [ "$WDAY" != "$RWDAY" ]; do
	YEAR=$(($YEAR - 1))
	RWDAY=`date -d "$WDAY $MONTH $MDAY $TIME $YEAR" | awk '{print $1}'`
done

echo    "$WDAY $MONTH $MDAY $TIME $YEAR" 
date -d "$WDAY $MONTH $MDAY $TIME $YEAR" '+%s'
./lookdate Fri 13 Sep 11:00
Fri Sep 13 11:00 2002
1031904000

./lookdate Fri 13 Sep 11:00 2001
Fri Sep 13 11:00 1996
842601600
sdio ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.