0 votes

Conversion d'une chaîne de date pour la commande date ou systemetup

J'ai une date dans ce format : 12 May 2017 09:04:26

Je veux mettre à jour automatiquement l'heure de mon Mac à partir de cette chaîne de caractères avec une ligne de commande.

La première méthode que j'ai trouvée consiste à utiliser date en ligne de commande, comme expliqué dans Page de manuel d'Apple sur les dates Le format accepté est le suivant [[[mm]dd]HH]MM[[cc]yy][.ss] (ou {mois}{jour}{heures}{minutes}{siècle}{année}.{secondes} ).

La deuxième méthode que j'ai trouvée consiste à utiliser commande systemsetup , avec setdate o settime drapeaux. Les formats acceptés sont les suivants : mm:dd:yy (ou {mois}:{jour}:{année} ) pour setdate y hh:mm:ss (ou {heure}:{minutes}:{secondes} ) pour settime .

Première question : quelle est la meilleure solution pour mettre à jour l'heure ?

Et comment convertir (avec AppleScript ou Bash script ou une autre méthode) la première chaîne dans un format valide pour date o systemsetup ?

En date La page de manuel parle de strptime mais je ne sais pas comment l'utiliser.


Mise à jour (après la réponse de @klanomath)

Voici le script que j'utilise pour mettre à jour l'heure de mon système lorsqu'elle est erronée (dans mon cas, la date remonte parfois à 2013). script vérifie quelques serveurs ntp avec ntpdate y sntp et si cela ne fonctionne pas, j'essaie d'obtenir la date de l'en-tête http de google.com pour la définir avec date y systemsetup commandes.

#!/bin/bash

# Uncomment for debug
#set -x

# Check if bad year
is_2013() {
 YEAR=$(sudo /usr/sbin/systemsetup -getdate | cut -d '/' -f 3)
 if [ $YEAR == "2013" ]; then return 0; else return 1; fi
}

http_date_ud() {
 # First method, update system time with "date" command 
 sudo date -f "%a, %d %b %Y %H:%M:%S %Z" "$1"

 # Second method, update system time with "systemsetup" command
 if is_2013 $1; then
  NDATE=$(date -j -f "%a, %d %b %Y %H:%M:%S %Z" "$1" "+%m:%d:%y")
  printf "$NDATE"
  NTIME=$(echo "$1" | cut -d' ' -f5)
  printf "$NTIME"
  sudo /usr/sbin/systemsetup -setusingnetworktime off
  sudo /usr/sbin/systemsetup -setdate $NDATE
  sudo /usr/sbin/systemsetup -settime $NTIME
  sudo /usr/sbin/systemsetup -setusingnetworktime on
 fi
}

# 1°/ Trying with ntpdate on Apple + NTP global time servers
if is_2013 $1; then ntpdate -t 4 -u time.apple.com; else exit 0; fi
if is_2013 $1; then ntpdate -t 4 -u pool.ntp.org; else exit 0; fi

# 2°/ Trying with sntp with Apple + NTP local time servers
if is_2013 $1; then sntp -s time.euro.apple.com; else exit 0; fi
if is_2013 $1; then sntp -s fr.pool.ntp.org; else exit 0; fi

# 3°/ Trying with HTTP header
HTTP_DATE=$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f4-9)
lc_tmp=$LC_ALL && LC_ALL=C
http_date_ud "$HTTP_DATE"
LC_ALL=lc_tmp

3voto

klanomath Points 63400

Pour définir correctement une date et une heure système plus ou moins actuelles à l'aide de la fonction date y wget utiliser :

sudo date -f "%d %b %Y %H:%M:%S %Z" "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-9)"

Utilisation ... cut -d' ' -f5-8)" (voir votre commentaire) omettra le fuseau horaire et vous devrez ajouter 1 ou 2 heures selon l'état de l'heure d'été pour ajuster votre heure locale.

Le résultat de wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-9 est quelque chose comme 12 mai 2017 12:17:00 GMT .

Le format de la commande date pour définir la date et l'heure doit donc être le suivant %d %b %Y %H:%M:%S %Z . Comme le mois de mai est le ainsi que le nom long du mois et nous ne connaissons pas vraiment le format du nom du mois dans la réponse de Google, %b devra peut-être être remplacé par %B en juin :-).


En raison de la rétention et d'autres déficiences, ce n'est pas très précis et le temps est jusqu'à 3,5 secondes (habituellement 0,32 seconde ici) par rapport au temps reçu via ntp.

Pour éliminer l'erreur sntp mentionnée dans votre commentaire, procédez comme suit :

sudo touch /var/db/ntp-kod
sudo chmod 666 /var/db/ntp-kod

Ahora sntp fr.pool.ntp.org y sudo sntp -s fr.pool.ntp.org devrait fonctionner.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X