AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 549148
Accepted
M.E.
M.E.
Asked: 2019-10-29 08:25:05 +0800 CST2019-10-29 08:25:05 +0800 CST 2019-10-29 08:25:05 +0800 CST

Como faço para converter um datetime em uma época?

  • 772

Eu vi que, para converter uma época em uma data e hora, o seguinte pode ser feito:

date -d  @1346338800 +'%Y%m%d%H%M%S'

Como posso fazer o oposto no Linux? IE converter 20191027163020 em um valor de época? É possível fazer sem fazer um script Python ou outra linguagem de programação?

command-line
  • 2 2 respostas
  • 4908 Views

2 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2019-10-29T08:43:44+08:002019-10-29T08:43:44+08:00

    Linuxé apenas um kernel, não tem relação com as perguntas e respostas.

    Com a implementação do busybox date( GNU datetambém está considerando implementar uma opção semelhante ; GNU e busybox datesão as duas implementações comumente encontradas em sistemas que usam Linux como kernel que eu sei que suportam sua date -d @xxxsintaxe).

    $ date -D %Y%m%d%H%M%S -d 20191027163020 +%s
    1572193820
    

    Com a implementação do ast-open date(como o datebuiltin do ksh93 quando construído como parte do ast-open):

    $ date -p %Y%m%d%H%M%S -d 20191027163020 +%s
    1572193820
    

    Com o strftimeembutido de zsh:

    $ zmodload zsh/datetime
    $ strftime -r %Y%m%d%H%M%S 20191027163020
    1572193820
    

    Com as versões atuais do GNU date, você pode transformá-lo em um formato compatível para seu -d/ -f(como 2019-10-27T16:30:20):

    t=20191027163020
    printf '%s%s-%s-%sT%s:%s:%s\n' $(printf '%s\n' "$t" | fold -w2) |
      date -f - +%s
    

    Observe que todos eles funcionam no horário local. Como o deslocamento do fuso horário não está incluído no seu formato, é ambíguo.

    Por exemplo, no Reino Unido continental aqui, 20191027011200 poderia ser 1572138720 ou 1572135120, pois o relógio mostrava 01:12:00 duas vezes com um intervalo de uma hora após a mudança para o horário de inverno.

    $ date -d @1572138720 +%Y%m%d%H%M%S
    20191027011200
    $ date -d @1572135120 +%Y%m%d%H%M%S
    20191027011200
    

    Você pode querer trabalhar sempre com horários UTC para evitar esse tipo de problema (definindo a $TZvariável de ambiente para, UTC0por exemplo).

    • 4
  2. user232326
    2019-10-30T14:48:45+08:002019-10-30T14:48:45+08:00

    Em geral, o comando date (as implementações que têm uma -dopção) pode converter de algumas strings de data formatadas em ISO8601 para um número de época.

    $ date -d '2019-10-27 16:30:20'
    Sun 27 Oct 2019 04:30:20 PM EDT
    
    $ busybox date -d '2019-10-27 16:30:20' +%s
    1572208220
    

    Mas se você quiser uma resposta para um formato geral, você precisa declarar o formato específico no qual a string de data é escrita. Isso pode ser feito com a -fopção para *BSD date(no -d option), a -Dopção de busybox date, a opção -ppara ast-open ou a variável DATEMSK em ksh93.

    date -j -f %Y%m%d%H%M%S 20191027163020 +%s                            # *BSD
    
    busybox date -D %Y%m%d%H%M%S -d 20191027163020 +%s                    # busybox
    
    date -p %Y%m%d%H%M%S -d 20191027163020 +%s                            # ast-open
    
    DATEMSK=/dev/fd/3 3<<<%Y%m%d%H%M%S printf "%(%s)T\n" 20191027163020   # ksh93
    

    Na data GNU você precisa fazer a formatação manualmente:

    $ t=20191027163020
    $ T=$(echo "$t" | sed -E 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3T\4:\5:\6/')
    
    $ echo "$T"
    2019-10-27T16:30:20
    
    $ date -d "$T" +%s 
    1572208220
    
    • 2

relate perguntas

  • O comando ip suporta curingas?

  • Qual é a interface recomendada para um utilitário que requer muitos parâmetros? [fechado]

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • Fazendo mysql CLI me pedir uma senha interativamente

  • Pub / sub de linha de comando sem um servidor?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve