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 / 700623
Accepted
hymie
hymie
Asked: 2022-04-28 08:18:17 +0800 CST2022-04-28 08:18:17 +0800 CST 2022-04-28 08:18:17 +0800 CST

O meu zoneinfo está para trás ou estou confuso

  • 772

Até onde eu sei, o horário do leste dos Estados Unidos é GMT-5 para Eastern Standard Time e GMT-4 para Eastern Daylight Time.

Então, por que esses dois comandos dão horas diferentes nas respostas?

laptop % TZ=EST5EDT date
Wed Apr 27 12:16:36 EDT 2022
laptop % TZ=GMT-4 date
Wed Apr 27 20:16:40 GMT 2022

Não deveriam ser iguais?

date timezone
  • 1 1 respostas
  • 250 Views

1 respostas

  • Voted
  1. Best Answer
    telcoM
    2022-04-28T09:55:01+08:002022-04-28T09:55:01+08:00

    Na verdade, existem duas maneiras principais de usar a variável TZ. O mais antigo é especificado nos padrões POSIX e pode codificar o fuso horário e as regras de horário de verão do ano atual na variável real. Por exemplo, um fuso horário europeu UTC + 2 horas pode ser totalmente especificado como este estilo POSIX:

    TZ=EET-2EEST,M3.5.0/3,M10.5.0/4
    
    • EET = ID do fuso horário do "horário padrão" ("Horário do Leste Europeu")
    • -2 = deslocamento que você deve adicionar à hora local para obter UTC
    • EEST = ID do fuso horário DST ("Horário de verão da Europa Oriental")
    • M3.5.0/3 = DST entra em vigor no último domingo de março, 03:00:00 hora local
    • M10.5.0/4 = o horário padrão é retomado no último domingo de outubro, 04:00:00 hora local

    Observe que esse formato assume que a regra do horário de verão para o ano atual também se aplica a quaisquer anos passados ​​e futuros... uma suposição que provavelmente não está correta.

    Como isso era claramente menos do que desejável, muitos sistemas operacionais de estilo unix usam a variável de ambiente TZ como referência a uma tabela mais extensa de informações de fuso horário, cobrindo definições atuais e históricas para um fuso horário específico.

    A mais abrangente dessas implementações baseadas em tabelas é o banco de dados de informações de fuso horário Olson, que agora é mantido pela IANA . Um valor TZ no estilo Olson geralmente está em <Continent>/<City>formato, mas o banco de dados também tem algumas outras opções. Você pode usar qualquer forma na variável TZ, mas se o valor for ambíguo, o formato POSIX terá precedência, pois é o padrão estabelecido .

    A definição padrão POSIX da variável TZ é "para trás" do que você pode supor naturalmente. O número após o primeiro rótulo de fuso horário identifica o número de horas que você deve adicionar à hora local para obter a hora UTC .

    Provavelmente porque antes do desenvolvimento do padrão POSIX, já existiam versões diferentes da convenção de variáveis ​​de ambiente TZ... e como o Unix foi originalmente desenvolvido no Hemisfério Ocidental, as convenções existentes tendiam a usar números positivos para fusos horários dos EUA. (Durante os primeiros dias do Unix, ninguém pode ter adivinhado que uma ramificação principalmente acadêmica do projeto de desenvolvimento do MULTICS OS se tornaria algo maior e de longa duração.)

    Eu entendi que os desenvolvedores das especificações POSIX tentaram ao máximo encontrar o comportamento que já era o mais comum e o codificaram como padrão, a menos que houvesse uma razão muito óbvia para fazer o contrário.

    Então, TZ=GMT-4é interpretado no estilo POSIX ... e não significa "um fuso horário GMT menos quatro horas": na verdade significa "um fuso horário quatro horas à frente do UTC e chamado GMT". Você pode chamar seus fusos horários personalizados como quiser, eu acho, mas reutilizar um identificador de fuso horário histórico bem conhecido para algo totalmente diferente causará confusão.

    Se você deseja especificar um fuso horário apenas por "GMT" no Linux, deve usar o novo estilo Olson de configurações TZ adicionando o Etc/prefixo ... e mesmo assim, a convenção de sinal é invertida do que você esperaria, provavelmente para mantenha a analogia com as configurações de estilo POSIX mais antigas.

    Comparar:

    $ TZ=Etc/GMT-4 date
    Wed 27 Apr 21:09:32 +04 2022     # Olson: 4 hours east of UTC, timezone correctly identified numerically 
    $ TZ=GMT-4 date
    Wed 27 Apr 21:09:50 GMT 2022     # POSIX: 4 hours east of UTC, misleading timezone identifier!
    $ TZ=Etc/GMT+4 date
    Wed 27 Apr 13:09:39 -04 2022     # Olson: 4 hours west of UTC, timezone correctly identified numerically
    $ TZ=GMT+4 date  
    Wed 27 Apr 13:10:14 GMT 2022     # POSIX: 4 hours west of UTC, misleading timezone identifier!
    $ date -u
    Wed 27 Apr 17:10:25 UTC 2022     # UTC time for reference.
    
    • 10

relate perguntas

  • Converter uma coluna no local em CSV

  • Como remover uma parte de uma coluna usando awk

  • A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

  • Obter todas as datas acessadas de um arquivo

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