Conversor de Timestamp Unix para Data: Suporte a Formatos de 12/24 Horas
Converta timestamps Unix em datas e horas legíveis. Escolha entre formatos de 12 horas e 24 horas com esta ferramenta de conversão simples e fácil de usar.
Conversor de Timestamp Unix
Data e Hora Convertidas
Documentação
Conversor de Timestamp Unix
Introdução
Um timestamp Unix (também conhecido como tempo POSIX ou tempo Epoch) é um sistema para descrever um ponto no tempo. É o número de segundos que se passaram desde 1 de janeiro de 1970 (meia-noite UTC/GMT), sem contar os segundos intercalares. Os timestamps Unix são amplamente utilizados em sistemas de computação e linguagens de programação, pois fornecem uma representação compacta e independente de linguagem de um momento específico no tempo.
Este conversor de timestamp para data detecta e processa automaticamente timestamps de vários comprimentos, incluindo precisão em microsegundos (16 dígitos), precisão em milissegundos (13 dígitos) e timestamps Unix padrão (10 dígitos). A ferramenta identifica o formato do timestamp com base no comprimento da entrada, converte-o para um formato de data e hora legível por humanos e exibe o resultado sem exigir que os usuários especifiquem o tipo de timestamp. Ele suporta formatos de hora de 12 horas (AM/PM) e de 24 horas para acomodar diferentes preferências regionais e pessoais.
Como Funcionam os Timestamps Unix
Os timestamps Unix são calculados como o número de segundos desde a Época Unix (1 de janeiro de 1970, 00:00:00 UTC). Isso os torna particularmente úteis para calcular diferenças de tempo e para armazenar datas em um formato compacto.
A conversão matemática de um timestamp Unix para uma data de calendário envolve várias etapas:
- Comece com a Época Unix (1 de janeiro de 1970, 00:00:00 UTC)
- Adicione o número de segundos no timestamp
- Leve em conta anos bissextos, variações no comprimento dos meses e outras complexidades do calendário
- Aplique ajustes de fuso horário, se necessário
Por exemplo, o timestamp Unix 1609459200
representa sexta-feira, 1 de janeiro de 2021, 00:00:00 UTC.
A fórmula de conversão pode ser expressa como:
A maioria das linguagens de programação e sistemas operacionais fornece funções integradas para lidar com essa conversão, abstraindo os complexos cálculos do calendário.
Formatos de Timestamp e Detecção Automática
Nosso conversor suporta três formatos de timestamp comuns, que são detectados automaticamente com base no número de dígitos:
-
Timestamp Unix Padrão (10 dígitos): Representa segundos desde a Época Unix. Exemplo:
1609459200
(1 de janeiro de 2021, 00:00:00 UTC) -
Precisão em Milissegundos (13 dígitos): Representa milissegundos desde a Época Unix. Exemplo:
1609459200000
(1 de janeiro de 2021, 00:00:00 UTC) -
Precisão em Microsegundos (16 dígitos): Representa microsegundos desde a Época Unix. Exemplo:
1609459200000000
(1 de janeiro de 2021, 00:00:00 UTC)
A detecção automática funciona analisando o comprimento da entrada:
- Se a entrada contém 10 dígitos, é tratada como um timestamp Unix padrão (segundos)
- Se a entrada contém 13 dígitos, é tratada como um timestamp em milissegundos
- Se a entrada contém 16 dígitos, é tratada como um timestamp em microsegundos
Essa detecção automática elimina a necessidade de os usuários especificarem o tipo de timestamp, tornando a ferramenta mais amigável e eficiente.
Opções de Formato de Hora
Este conversor oferece duas opções de formato de hora:
-
Formato de 24 horas (às vezes chamado de "hora militar"): As horas variam de 0 a 23, e não há designação AM/PM. Por exemplo, 15:00 é representado como 15:00.
-
Formato de 12 horas: As horas variam de 1 a 12, com AM (ante meridiem) para horários da meia-noite ao meio-dia, e PM (post meridiem) para horários do meio-dia à meia-noite. Por exemplo, 15:00 no formato de 24 horas é representado como 3:00 PM.
A escolha entre esses formatos é em grande parte uma questão de convenção regional e preferência pessoal:
- O formato de 24 horas é comumente usado na maior parte da Europa, América Latina e Ásia, assim como em contextos científicos, militares e médicos em todo o mundo.
- O formato de 12 horas é predominante nos Estados Unidos, Canadá, Austrália e alguns outros países de língua inglesa para uso cotidiano.
Casos Limite e Limitações
Ao trabalhar com timestamps Unix de várias precisões, é importante estar ciente de vários casos limite e limitações:
-
Timestamps negativos: Estes representam datas antes da Época Unix (1 de janeiro de 1970). Embora matematicamente válidos, alguns sistemas podem não lidar corretamente com timestamps negativos. Isso se aplica a todos os três formatos de timestamp.
-
O Problema do Ano 2038: Timestamps Unix padrão (10 dígitos) são frequentemente armazenados como inteiros com sinal de 32 bits, que irão transbordar em 19 de janeiro de 2038. Após esse ponto, sistemas de 32 bits não conseguirão representar os horários corretamente, a menos que modificados para usar um tipo de inteiro maior.
-
Considerações sobre precisão:
- Timestamps padrão (10 dígitos) têm precisão em nível de segundos, o que é suficiente para a maioria das aplicações cotidianas.
- Timestamps em milissegundos (13 dígitos) fornecem 1000x mais precisão, útil para aplicações que exigem um tempo mais preciso.
- Timestamps em microsegundos (16 dígitos) oferecem uma granularidade ainda mais fina (1/1.000.000 de segundo), que é necessária para computação de alto desempenho, aplicações científicas e certas transações financeiras.
-
Timestamps extremamente grandes: Datas muito distantes no futuro podem não ser representáveis em alguns sistemas ou podem ser tratadas de forma inconsistente. Isso é especialmente relevante para timestamps em milissegundos e microsegundos, que usam valores numéricos maiores.
-
Segundos intercalares: O tempo Unix não contabiliza segundos intercalares, que são ocasionalmente adicionados ao UTC para compensar a rotação irregular da Terra. Isso significa que o tempo Unix não está sincronizado precisamente com o tempo astronômico.
-
Considerações sobre fuso horário: Timestamps Unix representam momentos em UTC. A conversão para o horário local requer informações adicionais de fuso horário.
-
Horário de Verão: Ao converter timestamps para o horário local, as complexidades das transições do Horário de Verão devem ser consideradas.
-
Confusão de formato de timestamp: Sem a detecção adequada, um timestamp em milissegundos de 13 dígitos pode ser erroneamente interpretado como uma data muito distante se tratado como um timestamp baseado em segundos. Nosso conversor evita isso detectando automaticamente o formato com base no comprimento dos dígitos.
Casos de Uso
Timestamps Unix de várias precisões são usados em inúmeras aplicações em computação e gerenciamento de dados:
-
Registros de Banco de Dados: Timestamps são comumente usados para registrar quando entradas foram criadas ou modificadas.
- Timestamps padrão (10 dígitos) são frequentemente suficientes para aplicações gerais de banco de dados.
- Timestamps em milissegundos (13 dígitos) são usados quando uma ordenação mais precisa de eventos é necessária.
-
Desenvolvimento Web: Cabeçalhos HTTP, cookies e mecanismos de cache frequentemente usam timestamps Unix.
- O
Date.now()
do JavaScript retorna timestamps em milissegundos (13 dígitos).
- O
-
Arquivos de Log: Logs do sistema normalmente registram eventos com timestamps Unix para uma ordenação cronológica precisa.
- Sistemas de registro de alta frequência podem usar precisão em milissegundos ou microsegundos.
-
Sistemas de Controle de Versão: Git e outros VCS usam timestamps para registrar quando commits foram feitos.
-
Respostas de API: Muitas APIs da web incluem timestamps em suas respostas para indicar quando os dados foram gerados ou quando os recursos foram modificados pela última vez.
- APIs REST frequentemente usam timestamps em precisão de milissegundos.
-
Sistemas de Arquivos: Horários de criação e modificação de arquivos são frequentemente armazenados como timestamps Unix.
-
Gerenciamento de Sessões: Aplicações web usam timestamps para determinar quando as sessões de usuários devem expirar.
-
Análise de Dados: Timestamps fornecem uma maneira padronizada de trabalhar com dados temporais em aplicações de análise.
-
Negociação de Alta Frequência: Sistemas financeiros frequentemente requerem precisão em microsegundos (16 dígitos) para sequenciar transações com precisão.
-
Medições Científicas: Equipamentos de pesquisa podem registrar observações com precisão em microsegundos para uma análise temporal precisa.
Alternativas
Embora os timestamps Unix sejam amplamente utilizados, existem formatos alternativos de representação de tempo que podem ser mais apropriados em certos contextos:
-
ISO 8601: Um formato de string padronizado (por exemplo, "2021-01-01T00:00:00Z") que é legível por humanos, mantendo a ordenação. É frequentemente preferido para intercâmbio de dados e aplicações voltadas para o usuário.
-
RFC 3339: Um perfil do ISO 8601 usado em protocolos da internet, com requisitos de formatação mais rigorosos.
-
Formatos legíveis por humanos: Strings de data localizadas (por exemplo, "1 de janeiro de 2021") são mais apropriadas para interação direta com o usuário, mas são menos adequadas para computação.
-
Microsoft FILETIME: Um valor de 64 bits que representa o número de intervalos de 100 nanosegundos desde 1 de janeiro de 1601, usado em sistemas Windows.
-
Número do Dia Juliano: Usado em astronomia e algumas aplicações científicas, contando dias desde 1 de janeiro de 4713 a.C.
A escolha do formato de tempo depende de fatores como:
- Precisão requerida
- Necessidades de legibilidade humana
- Restrições de armazenamento
- Compatibilidade com sistemas existentes
- Faixa de datas que precisam ser representadas
História
O conceito de tempo Unix originou-se com o desenvolvimento do sistema operacional Unix nos Laboratórios Bell no final da década de 1960 e início da década de 1970. A decisão de usar 1 de janeiro de 1970 como a época foi um tanto arbitrária, mas prática para a época—era recente o suficiente para minimizar os requisitos de armazenamento para datas de interesse, mas distante o suficiente no passado para ser útil para dados históricos.
A implementação original usou um inteiro com sinal de 32 bits para armazenar o número de segundos, o que era adequado para a expectativa de vida dos sistemas Unix naquela época. No entanto, essa decisão levou ao Problema do Ano 2038 (às vezes chamado de "Y2K38" ou "Bug do Milênio Unix"), já que os inteiros com sinal de 32 bits só podem representar datas até 19 de janeiro de 2038 (03:14:07 UTC).
À medida que as necessidades de computação evoluíram, timestamps de maior precisão se tornaram necessários:
-
Precisão em milissegundos (13 dígitos) tornou-se comum com o surgimento da computação interativa e a necessidade de medir a responsividade da interface do usuário.
-
Precisão em microsegundos (16 dígitos) surgiu com aplicações de computação de alto desempenho e sistemas que exigem temporização extremamente precisa.
À medida que sistemas Unix e semelhantes ao Unix ganharam popularidade, o timestamp Unix tornou-se um padrão de fato para representar o tempo em computação. Foi adotado por inúmeras linguagens de programação, bancos de dados e aplicações, estendendo-se muito além de seu ambiente original Unix.
Sistemas modernos estão cada vez mais usando inteiros de 64 bits para timestamps, o que estende a faixa representável para aproximadamente 292 bilhões de anos em ambas as direções a partir da época, efetivamente resolvendo o Problema do Ano 2038. No entanto, sistemas e aplicações legados ainda podem ser vulneráveis.
A simplicidade e utilidade do timestamp Unix garantiram sua relevância contínua, apesar do desenvolvimento de formatos de representação de tempo mais sofisticados. Ele continua a ser um conceito fundamental na computação, sustentando grande parte de nossa infraestrutura digital.
Exemplos de Código
Aqui estão exemplos de como converter timestamps Unix de várias precisões para datas legíveis por humanos em várias linguagens de programação:
1// Conversão de timestamp em JavaScript com detecção automática de formato
2function convertTimestamp(timestamp, use12Hour = false) {
3 // Converter string para número se necessário
4 const numericTimestamp = Number(timestamp);
5
6 // Detectar formato de timestamp com base no comprimento dos dígitos
7 let date;
8 if (timestamp.length === 16) {
9 // Precisão em microsegundos (dividir por 1.000.000 para obter segundos)
10 date = new Date(numericTimestamp / 1000);
11 console.log("Detectado: Timestamp de precisão em microsegundos");
12 } else if (timestamp.length === 13) {
13 // Precisão em milissegundos
14 date = new Date(numericTimestamp);
15 console.log("Detectado: Timestamp de precisão em milissegundos");
16 } else if (timestamp.length === 10) {
17 // Timestamp Unix padrão (segundos)
18 date = new Date(numericTimestamp * 1000);
19 console.log("Detectado: Timestamp Unix padrão (segundos)");
20 } else {
21 throw new Error("Formato de timestamp inválido. Esperado 10, 13 ou 16 dígitos.");
22 }
23
24 // Opções de formato
25 const options = {
26 year: 'numeric',
27 month: 'long',
28 day: 'numeric',
29 weekday: 'long',
30 hour: use12Hour ? 'numeric' : '2-digit',
31 minute: '2-digit',
32 second: '2-digit',
33 hour12: use12Hour
34 };
35
36 // Converter para string usando formatação de local
37 return date.toLocaleString(undefined, options);
38}
39
40// Exemplo de uso
41try {
42 // Timestamp Unix padrão (10 dígitos)
43 console.log(convertTimestamp("1609459200", false));
44
45 // Precisão em milissegundos (13 dígitos)
46 console.log(convertTimestamp("1609459200000", false));
47
48 // Precisão em microsegundos (16 dígitos)
49 console.log(convertTimestamp("1609459200000000", true));
50} catch (error) {
51 console.error(error.message);
52}
53
1# Conversão de timestamp em Python com detecção automática de formato
2import datetime
3
4def convert_timestamp(timestamp, use_12hour=False):
5 # Converter para inteiro
6 timestamp = str(timestamp).strip()
7 numeric_timestamp = int(timestamp)
8
9 # Detectar formato de timestamp com base no comprimento dos dígitos
10 if len(timestamp) == 16:
11 # Precisão em microsegundos (dividir por 1.000.000 para obter segundos)
12 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000000)
13 print("Detectado: Timestamp de precisão em microsegundos")
14 elif len(timestamp) == 13:
15 # Precisão em milissegundos (dividir por 1.000 para obter segundos)
16 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000)
17 print("Detectado: Timestamp de precisão em milissegundos")
18 elif len(timestamp) == 10:
19 # Timestamp Unix padrão (segundos)
20 date = datetime.datetime.fromtimestamp(numeric_timestamp)
21 print("Detectado: Timestamp Unix padrão (segundos)")
22 else:
23 raise ValueError("Formato de timestamp inválido. Esperado 10, 13 ou 16 dígitos.")
24
25 # Formatar a string de data
26 if use_12hour:
27 format_string = "%A, %B %d, %Y %I:%M:%S %p" # Formato de 12 horas com AM/PM
28 else:
29 format_string = "%A, %B %d, %Y %H:%M:%S" # Formato de 24 horas
30
31 return date.strftime(format_string)
32
33# Exemplo de uso
34try:
35 # Timestamp Unix padrão (10 dígitos)
36 print(convert_timestamp("1609459200", False))
37
38 # Precisão em milissegundos (13 dígitos)
39 print(convert_timestamp("1609459200000", False))
40
41 # Precisão em microsegundos (16 dígitos)
42 print(convert_timestamp("1609459200000000", True))
43except ValueError as e:
44 print(e)
45
1<?php
2// Conversão de timestamp em PHP com detecção automática de formato
3function convertTimestamp($timestamp, $use12Hour = false) {
4 // Garantir que o timestamp seja uma string para verificação de comprimento
5 $timestamp = trim((string)$timestamp);
6
7 // Detectar formato de timestamp com base no comprimento dos dígitos
8 if (strlen($timestamp) === 16) {
9 // Precisão em microsegundos (dividir por 1.000.000 para obter segundos)
10 $seconds = $numericTimestamp / 1000000;
11 echo "Detectado: Timestamp de precisão em microsegundos\n";
12 } elseif (strlen($timestamp) === 13) {
13 // Precisão em milissegundos
14 $milliseconds = (float)$timestamp;
15 $date = DateTime::createFromFormat('U.u', sprintf('%.6f', $milliseconds / 1000));
16 echo "Detectado: Timestamp de precisão em milissegundos\n";
17 } elseif (strlen($timestamp) === 10) {
18 // Timestamp Unix padrão (segundos)
19 $seconds = (int)$timestamp;
20 $date = (new DateTime())->setTimestamp($seconds);
21 echo "Detectado: Timestamp Unix padrão (segundos)\n";
22 } else {
23 throw new Exception("Formato de timestamp inválido. Esperado 10, 13 ou 16 dígitos.");
24 }
25
26 // Formatar string
27 $formatString = $use12Hour
28 ? 'l, F j, Y g:i:s A' // Formato de 12 horas com AM/PM
29 : 'l, F j, Y H:i:s'; // Formato de 24 horas
30
31 // Retornar string de data formatada
32 return $date->format($formatString);
33}
34
35// Exemplo de uso
36try {
37 // Timestamp Unix padrão (10 dígitos)
38 echo convertTimestamp("1609459200", false) . "\n";
39
40 // Precisão em milissegundos (13 dígitos)
41 echo convertTimestamp("1609459200000", false) . "\n";
42
43 // Precisão em microsegundos (16 dígitos)
44 echo convertTimestamp("1609459200000000", true) . "\n";
45} catch (Exception $e) {
46 echo $e->getMessage() . "\n";
47}
48?>
49
1// Conversão de timestamp em Java com detecção automática de formato
2import java.time.Instant;
3import java.time.LocalDateTime;
4import java.time.ZoneId;
5import java.time.format.DateTimeFormatter;
6
7public class TimestampConverter {
8 public static String convertTimestamp(String timestamp, boolean use12Hour) {
9 // Trim a entrada
10 timestamp = timestamp.trim();
11
12 // Detectar formato de timestamp com base no comprimento dos dígitos
13 LocalDateTime dateTime;
14 if (timestamp.length() == 16) {
15 // Precisão em microsegundos (dividir por 1.000.000 para obter segundos)
16 long microseconds = Long.parseLong(timestamp);
17 Instant instant = Instant.ofEpochSecond(0, microseconds * 1000); // Converter para nanossegundos
18 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
19 System.out.println("Processando timestamp de precisão em microsegundos (16 dígitos)");
20 } else if (timestamp.length() == 13) {
21 // Precisão em milissegundos
22 long milliseconds = Long.parseLong(timestamp);
23 Instant instant = Instant.ofEpochMilli(milliseconds);
24 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
25 System.out.println("Processando timestamp de precisão em milissegundos (13 dígitos)");
26 } else if (timestamp.length() == 10) {
27 // Timestamp Unix padrão (segundos)
28 long seconds = Long.parseLong(timestamp);
29 Instant instant = Instant.ofEpochSecond(seconds);
30 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
31 System.out.println("Processando timestamp Unix padrão (10 dígitos)");
32 } else {
33 throw new IllegalArgumentException("Formato de timestamp inválido. Esperado 10, 13 ou 16 dígitos.");
34 }
35
36 // Criar formatador com base no formato desejado
37 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
38 use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
39 );
40
41 // Formatar a data
42 return dateTime.format(formatter);
43 }
44
45 public static void main(String[] args) {
46 try {
47 // Timestamp Unix padrão (10 dígitos)
48 System.out.println(convertTimestamp("1609459200", false));
49
50 // Precisão em milissegundos (13 dígitos)
51 System.out.println(convertTimestamp("1609459200000", false));
52
53 // Precisão em microsegundos (16 dígitos)
54 System.out.println(convertTimestamp("1609459200000000", true));
55 } catch (IllegalArgumentException e) {
56 System.err.println(e.getMessage());
57 }
58 }
59}
60
1// Conversão de timestamp em C# com detecção automática de formato
2using System;
3
4class TimestampConverter
5{
6 public static string ConvertTimestamp(string timestamp, bool use12Hour)
7 {
8 // Trim a entrada
9 timestamp = timestamp.Trim();
10
11 // Detectar formato de timestamp com base no comprimento dos dígitos
12 DateTime dateTime;
13 if (timestamp.Length == 16)
14 {
15 // Precisão em microsegundos (dividir por 1.000.000 para obter segundos)
16 if (!double.TryParse(timestamp, out double microseconds))
17 throw new ArgumentException("Formato de timestamp inválido");
18
19 // Converter microsegundos para DateTime
20 dateTime = DateTimeOffset.FromUnixTimeSeconds(0).DateTime.AddSeconds(microseconds / 1000000);
21 Console.WriteLine("Detectado: Timestamp de precisão em microsegundos");
22 }
23 else if (timestamp.Length == 13)
24 {
25 // Precisão em milissegundos
26 if (!long.TryParse(timestamp, out long milliseconds))
27 throw new ArgumentException("Formato de timestamp inválido");
28
29 dateTime = DateTimeOffset.FromUnixTimeMilliseconds(milliseconds).DateTime;
30 Console.WriteLine("Detectado: Timestamp de precisão em milissegundos");
31 }
32 else if (timestamp.Length == 10)
33 {
34 // Timestamp Unix padrão (segundos)
35 if (!long.TryParse(timestamp, out long seconds))
36 throw new ArgumentException("Formato de timestamp inválido");
37
38 dateTime = DateTimeOffset.FromUnixTimeSeconds(seconds).DateTime;
39 Console.WriteLine("Detectado: Timestamp Unix padrão (segundos)");
40 }
41 else
42 {
43 throw new ArgumentException("Formato de timestamp inválido. Esperado 10, 13 ou 16 dígitos.");
44 }
45
46 // Formatar string com base na preferência de 12 horas ou 24 horas
47 string formatString = use12Hour
48 ? "dddd, MMMM d, yyyy h:mm:ss tt" // Formato de 12 horas com AM/PM
49 : "dddd, MMMM d, yyyy HH:mm:ss"; // Formato de 24 horas
50
51 // Retornar string de data formatada
52 return dateTime.ToString(formatString);
53 }
54
55 static void Main()
56 {
57 try
58 {
59 // Timestamp Unix padrão (10 dígitos)
60 Console.WriteLine(ConvertTimestamp("1609459200", false));
61
62 // Precisão em milissegundos (13 dígitos)
63 Console.WriteLine(ConvertTimestamp("1609459200000", false));
64
65 // Precisão em microsegundos (16 dígitos)
66 Console.WriteLine(ConvertTimestamp("1609459200000000", true));
67 }
68 catch (ArgumentException e)
69 {
70 Console.WriteLine(e.Message);
71 }
72 }
73}
74
Tratamento de Casos Limite
Ao trabalhar com timestamps de diferentes precisões, é importante lidar corretamente com os casos limite. Aqui está um exemplo que demonstra um tratamento abrangente de casos limite:
1// Tratamento abrangente de casos limite em JavaScript para vários formatos de timestamp
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Validação de entrada
4 if (timestamp === undefined || timestamp === null || timestamp === '') {
5 return "Erro: Timestamp vazio ou indefinido";
6 }
7
8 // Garantir que o timestamp seja uma string para verificação de comprimento
9 const timestampStr = String(timestamp).trim();
10
11 // Verificar se o timestamp contém apenas dígitos
12 if (!/^\d+$/.test(timestampStr)) {
13 return "Erro: O timestamp deve conter apenas dígitos";
14 }
15
16 // Detectar formato com base no comprimento
17 let date;
18 try {
19 if (timestampStr.length === 16) {
20 // Precisão em microsegundos
21 const microseconds = Number(timestampStr);
22 date = new Date(microseconds / 1000); // Converter para milissegundos
23 console.log("Processando timestamp de precisão em microsegundos (16 dígitos)");
24
25 // Verificar data inválida
26 if (isNaN(date.getTime())) {
27 return "Erro: Timestamp de precisão em microsegundos inválido";
28 }
29 } else if (timestampStr.length === 13) {
30 // Precisão em milissegundos
31 const milliseconds = Number(timestampStr);
32 date = new Date(milliseconds);
33 console.log("Processando timestamp de precisão em milissegundos (13 dígitos)");
34
35 // Verificar data inválida
36 if (isNaN(date.getTime())) {
37 return "Erro: Timestamp de precisão em milissegundos inválido";
38 }
39 } else if (timestampStr.length === 10) {
40 // Timestamp Unix padrão (segundos)
41 const seconds = Number(timestampStr);
42 date = new Date(seconds * 1000);
43 console.log("Processando timestamp Unix padrão (10 dígitos)");
44
45 // Verificar data inválida
46 if (isNaN(date.getTime())) {
47 return "Erro: Timestamp padrão inválido";
48 }
49
50 // Verificar problema do Y2K38 (para sistemas de 32 bits)
51 const maxInt32 = 2147483647; // Valor máximo para inteiro com sinal de 32 bits
52 if (seconds > maxInt32) {
53 console.warn("Aviso: Timestamp excede o limite de inteiro de 32 bits (problema do Y2K38)");
54 }
55 } else {
56 return "Erro: Comprimento de timestamp inválido. Esperado 10, 13 ou 16 dígitos.";
57 }
58
59 // Formatar a data
60 const options = {
61 year: 'numeric',
62 month: 'long',
63 day: 'numeric',
64 weekday: 'long',
65 hour: use12Hour ? 'numeric' : '2-digit',
66 minute: '2-digit',
67 second: '2-digit',
68 hour12: use12Hour
69 };
70
71 return date.toLocaleString(undefined, options);
72 } catch (error) {
73 return "Erro ao converter timestamp: " + error.message;
74 }
75}
76
77// Testar com vários casos limite
78console.log(safeConvertTimestamp("1609459200")); // Padrão (10 dígitos)
79console.log(safeConvertTimestamp("1609459200000")); // Milissegundos (13 dígitos)
80console.log(safeConvertTimestamp("1609459200000000")); // Microsegundos (16 dígitos)
81console.log(safeConvertTimestamp("abc123")); // Não numérico
82console.log(safeConvertTimestamp("12345")); // Comprimento inválido
83console.log(safeConvertTimestamp("9999999999999999")); // Timestamp em microsegundos muito grande
84console.log(safeConvertTimestamp("")); // String vazia
85
Perguntas Frequentes
O que é um timestamp Unix?
Um timestamp Unix é o número de segundos que se passaram desde 1 de janeiro de 1970 (meia-noite UTC/GMT), sem contar os segundos intercalares. Ele fornece uma representação compacta e independente de linguagem de um momento específico no tempo.
Como funciona a detecção automática de formato de timestamp?
O conversor detecta automaticamente o formato do timestamp com base no número de dígitos:
- 10 dígitos: Timestamp Unix padrão (segundos desde a época)
- 13 dígitos: Timestamp de precisão em milissegundos
- 16 dígitos: Timestamp de precisão em microsegundos
Por que eu precisaria de precisão em milissegundos ou microsegundos?
A precisão em milissegundos (13 dígitos) é útil para aplicações que exigem um tempo mais preciso, como monitoramento de desempenho, rastreamento de interações do usuário e certas aplicações financeiras. A precisão em microsegundos (16 dígitos) é necessária para computação de alto desempenho, aplicações científicas e sistemas de negociação de alta frequência, onde a temporização extremamente precisa é crítica.
Posso converter datas antes de 1970 usando timestamps Unix?
Sim, datas antes de 1 de janeiro de 1970 são representadas usando timestamps negativos. No entanto, alguns sistemas podem não lidar corretamente com timestamps negativos, portanto, é importante testar essa funcionalidade se você precisar trabalhar com datas históricas.
Qual é o problema do ano 2038?
O problema do ano 2038 ocorre porque muitos sistemas armazenam timestamps Unix como inteiros com sinal de 32 bits, que só podem representar datas até 19 de janeiro de 2038 (03:14:07 UTC). Após esse ponto, o inteiro transbordará, potencialmente causando falhas no sistema. Sistemas modernos estão cada vez mais usando inteiros de 64 bits para evitar esse problema.
Como eu lido com conversões de fuso horário com timestamps Unix?
Timestamps Unix estão sempre em UTC (Tempo Universal Coordenado). Para converter para um fuso horário específico, você precisa aplicar o deslocamento apropriado após converter o timestamp para uma data. A maioria das linguagens de programação fornece funções integradas para lidar com conversões de fuso horário.
Qual é a diferença entre o tempo Unix e o ISO 8601?
O tempo Unix é uma representação numérica (segundos desde a época), enquanto o ISO 8601 é um formato de string (por exemplo, "2021-01-01T00:00:00Z"). O tempo Unix é mais compacto e mais fácil de usar para cálculos, enquanto o ISO 8601 é mais legível por humanos e autoexplicativo.
Quão precisos são os timestamps Unix?
Timestamps Unix padrão têm precisão em nível de segundos. Para aplicações que exigem maior precisão, timestamps em milissegundos (13 dígitos) fornecem precisão de 1/1000 de segundo, e timestamps em microsegundos (16 dígitos) oferecem precisão de 1/1.000.000 de segundo.
Os timestamps Unix contabilizam segundos intercalares?
Não, o tempo Unix é definido como o número de segundos desde a época, excluindo segundos intercalares. Isso significa que durante um segundo intercalar, o timestamp Unix não incrementa. Isso pode causar problemas em aplicações que requerem tempo astronômico preciso.
Posso usar timestamps Unix para agendar eventos futuros?
Sim, timestamps Unix são amplamente utilizados para agendamentos. No entanto, para datas muito distantes no futuro, esteja ciente de possíveis limitações, como o problema do ano 2038 para sistemas de 32 bits e o tratamento de mudanças de fuso horário e transições do horário de verão.
Referências
-
"Unix Time." Wikipedia, Fundação Wikimedia, https://en.wikipedia.org/wiki/Unix_time
-
"Problema do Ano 2038." Wikipedia, Fundação Wikimedia, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "As Complexidades do Tempo Calendárico." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Fundação Wikimedia, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Data e Hora na Internet: Timestamps." Grupo de Engenharia da Internet (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., e Dennis M. Ritchie. "A Linguagem de Programação C." Prentice Hall, 1988.
-
"Tempos de Precisão em Computação de Alto Desempenho." ACM Computing Surveys, https://dl.acm.org/doi/10.1145/3232678
-
"Representação de Tempo em Sistemas Financeiros." Journal of Financial Technology, https://www.fintech-journal.com/time-representation
Experimente nosso conversor de timestamps agora para converter facilmente timestamps Unix de qualquer precisão em datas legíveis por humanos. Se você está trabalhando com timestamps Unix padrão, precisão em milissegundos ou precisão em microsegundos, nossa ferramenta detecta automaticamente o formato e fornece conversões precisas.
Feedback
Clique no feedback toast para começar a dar feedback sobre esta ferramenta
Ferramentas Relacionadas
Descubra mais ferramentas que podem ser úteis para o seu fluxo de trabalho