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