GNU/Linux >> Tutoriels Linux >  >> Linux

Calculer les jours depuis le 01/01/1970

Solution 1 :

ring0 m'a battu de quelques secondes, mais la commande complète est :

echo $(($(date --utc --date "$1" +%s)/86400))

Cela passe par l'heure UTC. Résultat :

[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

Une vérification rapide avec WolframAlpha montre que c'est la bonne valeur.

Solution 2 :

Je pense que c'est la méthode la plus simple :

expr $(date +%s) / 86400

Solution 3 :

Le date La commande peut vous donner le nombre de secondes depuis 1970-01-01 00:00:00 UTC .

  date +"%s"

Vous pouvez diviser le résultat par 3600*24 pour obtenir le nombre de jours (UTC).

Par exemple. dans Bash

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

pour afficher le nombre de jours.

Solution 4 :

Je devais également résoudre ce problème, mais je voulais obtenir la même valeur pour le jour # quelle que soit l'heure de la journée. Avec des approches comme celles présentées ici, la valeur changera à minuit UTC au lieu de minuit heure locale. Cela semble probablement moins problématique dans l'UE ou sur la côte est des États-Unis, qui sont suffisamment proches de l'UTC pour que la valeur du jour ne change pas au milieu d'une journée de travail typique, mais, par exemple, en Californie, le changement de jour se produirait à 16 h 00 HNP, ce qui pourrait être gênant. J'imagine que les Australiens seraient particulièrement ennuyés de voir la valeur du jour changer en fin de matinée.

Si nous voulons corriger cela, nous devons ajouter le décalage par rapport à UTC avant de diviser par secondes/jour. Heureusement, la commande Linux date inclut un %z séquence de format qui signale le décalage par rapport à UTC. Alors que le format standard (ce résultat est pour l'heure de Denver, MDT) :

$ date +%z
-0600

. . . n'est pas directement utilisable dans un calcul, les bons modificateurs donneront ce que l'on veut :

$ date +%-:::z
-6

Mettez cela avec les conversions habituelles secondes/heures/jours, et je pense que ce qui suit devrait afficher les jours depuis le 01/01/1970, le 01/01/1970 étant lui-même le jour zéro et la valeur incrémentée à minuit, heure locale :

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

Ce calcul simple ne fonctionnera pas pour les fuseaux horaires qui ne sont pas décalés de l'UTC d'heures entières (par exemple, Inde, TZ=Asie/Kolkata), puisque le "+5:30" produit par date +%-:::z produira une erreur "caractère non valide dans l'expression" lorsqu'il est utilisé dans l'instruction ci-dessus.


Linux
  1. Comment installer NetBeans IDE 7.1 sur CentOS 6.2/6.1/6.0 / CentOS 5.7

  2. Travailler avec des colonnes - Awk et Sed ?

  3. Mettre à niveau vers le Php 7.1/7.2 spécifique à partir de Php 7.0 dans Ubuntu 16.04 ?

  4. Comparaison de dates dans Bash

  5. Jouer à Quake 1/2 sous Linux ?

Commande de date sous Linux

7 exemples de commande de date sous Linux

Nom de code et date de sortie d'Ubuntu 22.10

Convertir une date ISO en secondes depuis l'époque dans Linux bash

Bash :calcule le temps écoulé entre deux horodatages

Suppression de fichiers de plus de 30 jours en fonction du nom de fichier comme date