0 votos

Convertir una cadena de fecha para el comando date o systemsetup

Tengo una fecha en este formato: 12 May 2017 09:04:26

Quiero auto-actualización de la hora de mi Mac de esta cadena con una línea de comandos.

La primera manera que he encontrado es usar date de la línea de comandos, como se explica en la Manzana de la fecha manual, el formato aceptado es [[[mm]dd]HH]MM[[cc]yy][.ss] (o {mes}{día}{horario}{minutos}{siglo}{año}.{segundos}).

La segunda manera que he encontrado es usar systemsetup comando, con setdate o settime banderas. Los formatos aceptados son: mm:dd:yy (o {mes}:{día}:{año}) setdate y hh:mm:ss (o {hora}:{minutos}:{segundos}) settime.

Primera pregunta: ¿cuál es la mejor solución a la hora de actualización?

Y ¿cómo puedo convertir (con AppleScript o Bash Script o cualquier otro método) la primera cadena a un formato válido para date o systemsetup?

El date manual hablando de strptime comando, pero no sé cómo puedo usarlo.


Actualización (después de @klanomath respuesta)

Aquí está el script que estoy usando para actualizar mi sistema de tiempo cuando es malo (en mi caso a veces la fecha de volver a 2013). Script de control de algunos servidores ntp con ntpdate y sntp comandos y si no funciona, tratando de obtener la fecha de google.com encabezado http para establecer con date y systemsetup comandos.

#!/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 Puntos 19587

Para establecer correctamente un más o menos actual fecha y hora del sistema con date y wget el uso de:

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)"

El uso de ... cut -d' ' -f5-8)" (véase el comentario) omitir el tiempo de la zona y habría que añadir 1 o 2 horas, dependiendo del estado de la luz del día el ahorro de tiempo para ajustar la hora local.

El resultado de wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-9 es algo así como el 12 de Mayo de 2017 12:17:00 GMT.

Por lo que el formato de fecha y hora de la fecha de comandos para configurar la fecha/hora tiene que ser %d %b %Y %H:%M:%S %Z. Desde el mes de Mayo es corto así como el nombre largo del mes y no sabemos realmente el formato del nombre del mes en Google la respuesta, %b, puede ser necesario sustituir por %B en junio :-).


Debido a la retención y otras deficiencias esto no es muy exacto, y ∂ es de hasta 3,5 segundos (generalmente 0.32 segundos aquí) en comparación con el momento en que recibió a través de ntp.

Para deshacerse de el sntp error mencionado en tu comentario, haga lo siguiente:

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 debería funcionar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X