La chaîne de date et d'heure est au format suivant: 06/12/2012 07:21:22. Comment puis-je le convertir en horodatage ou en époque UNIX?
92
Ce que vous recherchez, c'est date --date='06/12/2012 07:21:22' +"%s"
. Gardez à l'esprit que cela suppose que vous utilisez GNU coreutils, car les deux --date
et la %s
chaîne de format sont des extensions GNU. POSIX ne spécifie ni l'un ni l'autre, il n'y a donc pas de moyen portable de faire une telle conversion, même sur les systèmes compatibles POSIX.
Consultez la page de manuel appropriée pour les autres versions de date
.
Remarque: bash --date
et -d
option s'attendent à ce que la date soit au format US ou ISO8601, c'est-à-dire mm/dd/yyyy
ou yyyy-mm-dd
non au Royaume-Uni, dans l'UE ou dans tout autre format.
+"%s"
représente le format de sortie et%s
est le format de l'heure en secondes depuis 1970date --date='06/12/2012 07:21:22 -0000' +"%s"
convertit la date UTC en horodatage Unixyyyy-mm-dd hh:mm:ss
jeter un œil à gnu.org/software/coreutils/manual/html_node/… :gdate --date='2019-06-18 00:02:00 +0000' +%s
Pour Linux, exécutez cette commande
Pour mac OSX, exécutez cette commande
la source
-u
indicateur devrait résoudre ce problème.-u
drapeau doit venir avant le-f
drapeau, sinon le shell l'interprète comme la chaîne de format. Donc, ça devrait être:date -j -u -f "%a..."
date -jf "%Y-%m-%d %H:%M:%S" "2018-01-08 14:45:00" +%s
Beaucoup de ces réponses sont trop compliquées et manquent également de savoir comment utiliser les variables. Voici comment vous le feriez plus simplement sur un système Linux standard (comme mentionné précédemment, la commande de date devrait être ajustée pour les utilisateurs Mac):
Exemple de script:
Résulte en :
Ou en fonction:
la source
la source
Solution efficace utilisant
date
comme processus dédié en arrière-planAfin de rendre ce genre de traduction beaucoup plus rapide ...
Intro
Dans cet article, vous trouverez
bc
,rot13
,sed
...).Démo rapide
Cela doit sortir le courant UNIXTIME . À partir de là, vous pouvez comparer
et:
De plus de 6 secondes à moins d'une demi-seconde !! (sur mon hôte).
Vous pouvez vérifier
echo $ans
, remplacer"now"
par"2019-25-12 20:10:00"
et ainsi de suite ...Facultativement, vous pouvez, une fois l'exigence de sous-processus de date terminée:
Message original (explication détaillée)
Au lieu d'exécuter 1 fork par date pour convertir, exécutez
date
juste 1 fois et effectuez toutes les conversions avec le même processus (cela pourrait devenir beaucoup plus rapide)!:Échantillon:
Alors maintenant, jetez un œil:
Cela a été fait en une seule exécution!
Utilisation d' un sous- processus de longue durée
Nous avons juste besoin d'un fifo :
(Remarque: pendant que le processus est en cours d'exécution et que tous les descripteurs sont ouverts, nous pourrions supprimer en toute sécurité l'entrée du système de fichiers de fifo.)
Alors maintenant:
On pourrait faire une petite fonction:
Ou utilisez ma
newConnector
fonctionAvec des fonctions de connexion
MySQL/MariaDB
,PostgreSQL
etSQLite
...Vous pouvez les trouver en différentes versions sur GitHub , ou sur mon site: télécharger ou afficher .
Nota: Sur GitHub , les fonctions et le test sont des fichiers séparés. Sur mon site, les tests sont exécutés simplement si ce script ne provient pas .
la source
Assurez-vous simplement du fuseau horaire que vous souhaitez utiliser.
L'utilisation la plus courante prend le fuseau horaire de la machine.
Mais au cas où vous voudriez intentionnellement passer la date UTC et que vous voulez un fuseau horaire approprié, vous devez ajouter un
-u
indicateur. Sinon, vous le convertissez à partir de votre fuseau horaire local.la source
date
formate correctement cette entrée.