Простой метод найти число секунд между двумя (нестандартными) форматами даты?

На моем Пи у меня есть сценарий, который проверяет, есть ли у меня IP-адрес, прежде чем оно сделает что угодно еще:

IP.py

import socket
from time import sleep

def checknetwork():
    ip = False
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('google.com', 0))
        ip = s.getsockname()[0]
        s.close()
    except socket.error:
        return False
    else:
        return ip

def main():
    x = checknetwork()
    while x == False:
        print "Checking network ..."
        x = checknetwork()
        sleep(1)

Это просто пытается открыть сокет для некоторого известного адреса и сбоев, пока это не может на самом деле получить соединение. Сделайте это исполняемым файлом с:

chmod +x ip.py

Затем необходимо добавить это для загружений путем добавления его к/etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/bin/python /directory/where/you/put/ip.py

exit 0

Надежда, которая помогает

4
05.03.2015, 18:05
3 ответа

Не уверены, что вы подразумеваете под «без расчета». Следующее делает расчет ...

date1="Thu Mar 5 09:15:27 2015"
date2="Thu Mar 5 09:30:58 2015"

printf "%s\n" $(( $(date -d "$date2" "+%s") - $(date -d "$date1" "+%s") ))
6
27.01.2020, 20:51

Если внимательно прочитать tr manual , можно легко объяснить команду.

Общая форма:

tr [option]... set1 [set2]

С помощью команды

tr -dc "01"

set1 содержит 0 и 1 . При использовании опции -c tr заменяет set1 дополнением, которое означает все символы, кроме 0 и 1 .

Таким образом, команду можно интерпретировать как Удалить все символы, кроме нуля и единицы .

-121--118389-

-d означает удаление всех символов в SET1 и -c означает использование «дополнения» SET1. В сочетании это означает: удалить все символы, которые не находятся в SET1

Вы получаете список символов, включая 0 и 1, а tr -dc «01» удаляет все символы, которые не находятся в списке «01», отображая только 0s и 1s.

-121--118387-

Без информации о часовом поясе не всегда можно дать правильный ответ.

#!/bin/bash
export TZ
for TZ in America/New_York Europe/Prague ; do
    d1=$(date -d 'Mar 8 01:59:59 2015' +%s)
    d2=$(date -d 'Mar 8 03:00:01 2015' +%s)
    echo "$TZ: $((d2-d1))"
done
1
27.01.2020, 20:51

Обратите внимание, что некоторые другие оболочки имеют встроенную функцию:

zsh

zmodload zsh/datetime
date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
for v (date{1,2}) strftime -rs $v '%a %b %d %T %Y' ${(P)v}
echo $((date2 - date1))

ksh93

date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
echo "$(($(printf '%(%s)T - %(%s)T' "$date2" "$date1")))"

(для обоих случаев предполагается, что даты находятся в локальном часовом поясе).

0
27.01.2020, 20:51

Теги

Похожие вопросы