Tutorial

Como processar carimbos de data/hora do Excel

Introdução

O Excel armazena datas como números de série que representam o número de dias desde 1º de janeiro de 1900 (ou 1º de janeiro de 1904 no Mac). Compreender como o Excel lida com carimbos de data/hora é essencial para migração de dados, integração de API e trabalho com análises baseadas em datas. Este guia aborda técnicas de conversão, cálculos e práticas recomendadas.

Compreendendo o sistema de datas do Excel

Como o Excel armazena datas

O Excel usa dois sistemas de datas:

Sistema de Data 1900 (Windows - Padrão)

  • Dia 1 = 1º de janeiro de 1900
  • A fração decimal representa a hora do dia (por exemplo, 0,5 = meio-dia)
  • Inclui um bug: o Excel trata 1900 como um ano bissexto (não era)

Sistema de data de 1904 (Mac)

  • Dia 1 = 2 de janeiro de 1904
  • Projetado para corrigir o bug do ano bissexto de 1900
  • Usado por padrão em versões mais antigas do Excel para Mac

Importante: Sempre verifique qual sistema de data seu arquivo Excel usa antes de realizar conversões. Sistemas de datas mistos na mesma pasta de trabalho podem causar erros significativos.

Estrutura do número de série

Excel Date Number = Days since epoch + Fraction of day

Example: 44927.5
  = 44927 (days since Jan 1, 1900)
  + 0.5 (half day = 12:00 PM)
  = January 1, 2023, 12:00 PM

Conversões básicas

Data do Excel para carimbo de data/hora Unix

Método 1: Fórmula Excel

Converter a data serial do Excel em carimbo de data/hora Unix (segundos desde 01/01/1970):

excel
=(A1 - DATE(1970,1,1)) * 86400

Where:
  A1 = Excel serial date (e.g., 44927.5)
  DATE(1970,1,1) = Unix epoch in Excel (25569)
  86400 = seconds per day

Dica profissional: Use intervalos nomeados para melhor legibilidade:

excel
> =EPOCH_DATE * 86400
>
```> Onde EPOCH_DATE é definido como 25569

### Método 2: Função Excel VBA

Crie uma função VBA reutilizável para conversões:

vba Function ExcelToUnix(excelDate As Double) As Long ' Convert Excel serial date to Unix timestamp Dim epochDate As Date epochDate = #1/1/1970# ExcelToUnix = (excelDate - epochDate) * 86400 End Function

### Método 3: Conversor Online

Use nossa ferramenta [Excel Timestamp Converter](/excel-timestamp) para conversões instantâneas sem fórmulas.

## Carimbo de data e hora Unix para data do Excel

### Método 1: Fórmula Excel

Converta o carimbo de data/hora Unix em data serial do Excel:

excel =(A1 / 86400) + DATE(1970,1,1)

Where: A1 = Unix timestamp in seconds 86400 = seconds per day DATE(1970,1,1) = Unix epoch in Excel (25569)

### Método 2: Função Excel VBA

vba Function UnixToExcel(unixTimestamp As Long) As Date ' Convert Unix timestamp to Excel date Dim epochDate As Date epochDate = #1/1/1970# UnixToExcel = (unixTimestamp / 86400) + epochDate End Function

## Cálculos de data

## Aritmética de Data

### Adicionando e subtraindo dias

excel ' Add 7 days to a date =A1 + 7

' Subtract 30 days from a date =A1 - 30

' Calculate days between two dates =B1 - A1

### Adicionando e Subtraindo Tempo

excel ' Add 4 hours to a datetime =A1 + (4/24)

' Add 30 minutes to a datetime =A1 + (30/1440)

' Add 45 seconds to a datetime =A1 + (45/86400)

' Where: 24 = hours per day 1440 = minutes per day 86400 = seconds per day

> **Prática recomendada:** Use referências de células para unidades de tempo para evitar codificação fixa:
>

excel

=A1 + (B1/86400)


### Cálculo de dias úteis

excel ' Calculate business days between two dates (excludes weekends) =NETWORKDAYS(A1, B1)

' Calculate business days excluding holidays =NETWORKDAYS(A1, B1, C1:C10)

> **Versão Internacional:** Use NETWORKDAYS.INTL para padrões personalizados de fim de semana:
>

excel

=NETWORKDAYS.INTL(A1, B1, 11)



## Funções de data do Excel

## Funções essenciais de data

### Data e hora atuais

excel ' Today's date (no time) =TODAY()

' Current date and time =NOW()

' Current time only =NOW() - TODAY()

' Extract time from datetime =MOD(A1, 1)

### Extraindo componentes de data

excel ' Extract year =YEAR(A1)

' Extract month number (1-12) =MONTH(A1)

' Extract day of month =DAY(A1)

' Extract hour (0-23) =HOUR(A1)

' Extract minute (0-59) =MINUTE(A1)

' Extract second (0-59) =SECOND(A1)

### Criando datas a partir de componentes

excel ' Create date from year, month, day =DATE(2023, 1, 15)

' Create time from hour, minute, second =TIME(14, 30, 0)

' Combine date and time =DATE(2023, 1, 15) + TIME(14, 30, 0)

### Trabalhando com dias da semana

excel ' Get day of week (1=Sunday, 7=Saturday) =WEEKDAY(A1)

' Get day of week name =TEXT(A1, "dddd")

' Get weekday name (3-letter abbreviation) =TEXT(A1, "ddd")

' ISO week number =ISOWEEKNUM(A1)

' Week number in year =WEEKNUM(A1)

## Operações avançadas de data

## Arredondamento e truncamento de data

### Truncar para início do período

excel ' Truncate to start of day (remove time) =INT(A1)

' Round to nearest hour =ROUND(A1*24, 0)/24

' Round to nearest day =ROUND(A1, 0)

' Round down to start of month =EOMONTH(A1, -1) + 1

' Round down to start of year =DATE(YEAR(A1), 1, 1)

### Cálculos de fim de período

excel ' End of current month =EOMONTH(A1, 0)

' End of next month =EOMONTH(A1, 1)

' End of previous month =EOMONTH(A1, -1)

' End of current year =DATE(YEAR(A1), 12, 31)

## Lógica de Data Condicional

### Usando IF com datas

excel ' Check if date is in the past =IF(A1 < TODAY(), "Past", "Future")

' Check if date is within last 30 days =IF(AND(A1 >= TODAY()-30, A1 <= TODAY()), "Recent", "Old")

' Calculate age =IF(MONTH(TODAY()) >= MONTH(A1), YEAR(TODAY()) - YEAR(A1), YEAR(TODAY()) - YEAR(A1) - 1)

### Lógica de Data Complexa

excel ' Calculate fiscal year (starts July 1) =IF(MONTH(A1) >= 7, YEAR(A1) + 1, YEAR(A1))

' Calculate quarter =ROUNDUP(MONTH(A1)/3, 0)

' Add business days (skipping weekends) =WORKDAY(A1, 10)

## Formatação de data

## Formatos de data personalizados

### Códigos de formato
```text
Format Code Examples:

d          Day (1-31)
dd         Day with leading zero (01-31)
ddd        Day abbreviation (Mon)
dddd       Full day name (Monday)

m          Month (1-12)
mm         Month with leading zero (01-12)
mmm        Month abbreviation (Jan)
mmmm       Full month name (January)

yy         2-digit year (23)
yyyy       4-digit year (2023)

h          Hour (0-23)
hh         Hour with leading zero (00-23)
m          Minute (0-59)
mm         Minute with leading zero (00-59)
s          Second (0-59)
ss         Second with leading zero (00-59)

AM/PM      AM/PM indicator

Aplicando Formatos

excel
' Apply date format via formula
=TEXT(A1, "yyyy-mm-dd")

' Apply datetime format with seconds
=TEXT(A1, "yyyy-mm-dd hh:mm:ss")

' Custom format: "January 15, 2023 at 2:30 PM"
=TEXT(A1, "mmmm dd, yyyy at h:mm AM/PM")

' ISO 8601 format
=TEXT(A1, "yyyy-mm-ddThh:mm:ss")

Importante: TEXT() retorna um valor de string. Use operações numéricas primeiro e depois formate no final.

Armadilhas Comuns

Conflitos no sistema de datas

Sistema de Data 1900 vs 1904

Problema: Sistemas de datas mistas causam erros de cálculo significativos.

excel
' Check if workbook uses 1904 date system
' Excel Options > Advanced > When calculating this workbook > Use 1904 date system

Solução: Sempre use Ferramentas > Opções > Avançado para verificar as configurações do sistema de datas antes de trabalhar com datas.

Bug do ano bissexto (1900)

O Excel trata incorretamente 1900 como ano bissexto, incluindo 29 de fevereiro de 1900 (que não existia):

excel
' March 1, 1900 in Excel
=DATE(1900, 3, 1)  ' Returns 61 (correct)

' February 28, 1900 in Excel
=DATE(1900, 2, 28)  ' Returns 59 (correct)

' February 29, 1900 (DOESN'T EXIST)
=DATE(1900, 2, 29)  ' Returns 60 (incorrect - this day never happened)

Solução alternativa: O sistema de datas de 1904 corrige esse bug, mas introduz problemas de compatibilidade com arquivos do Windows Excel.

Problemas de fuso horário

O Excel armazena datas sem informações de fuso horário:

excel
' Current time in Excel
=NOW()  ' Returns local system time

Prática recomendada: armazene carimbos de data/hora UTC em colunas separadas e mantenha metadados de fuso horário para conversões.

Texto versus formatos de data

Problema: Datas armazenadas como texto não podem ser usadas em cálculos.

excel
' Check if cell contains date or text
=ISNUMBER(A1)  ' TRUE for dates, FALSE for text

' Convert text to date
=DATEVALUE("2023-01-15")
=TIMEVALUE("14:30:00")

' Parse combined date and time text
=DATEVALUE("2023-01-15") + TIMEVALUE("14:30:00")

Otimização de desempenho

Desempenho de cálculo

Evite funções voláteis

Problema: Funções como NOW() e TODAY() recalculam a cada alteração, diminuindo a velocidade de pastas de trabalho grandes.

Solução: Armazene resultados de funções voláteis em células estáticas:

excel
> ' BAD: Every row recalculates
> =IF(A1 > NOW(), "Future", "Past")
>
> ' GOOD: Calculate once in cell B1
> B1: =NOW()
> A2: =IF(A1 > $B$1, "Future", "Past")
>
```>
> ### Usar intervalos nomeados
>
>

excel

' Define named ranges (Formulas > Name Manager) EPOCH_DATE = 25569 SECONDS_PER_DAY = 86400

' Use in formulas =(A1 - EPOCH_DATE) * SECONDS_PER_DAY

> **Benefício:** Intervalos nomeados melhoram a legibilidade e facilitam a manutenção das fórmulas.

### Fórmulas de matriz para operações em lote

excel ' Convert multiple Unix timestamps at once (Excel 365) =A2:A100/86400 + DATE(1970,1,1)

' Calculate ages for a range =YEAR(TODAY()) - YEAR(A2:A100)

## Exemplos de integração

## Exportando para CSV

Ao exportar datas do Excel para CSV:

excel ' Format dates as ISO 8601 before exporting =TEXT(A1, "yyyy-mm-ddThh:mm:ss")

> **Prática recomendada:** salve como CSV com codificação UTF-8 para preservar os formatos de data.

## Importando da API

Analise datas JSON de APIs:

excel ' Assuming cell A1 contains: 1673761800 (Unix timestamp) ' Convert to Excel date =(A1/86400) + DATE(1970,1,1)

' Format as readable date =TEXT((A1/86400) + DATE(1970,1,1), "yyyy-mm-dd hh:mm:ss")

## Integração de banco de dados

Trabalhando com bancos de dados SQL:

excel ' Prepare date for SQL INSERT =TEXT(A1, "yyyy-mm-dd hh:mm:ss") ' Returns: "2023-01-15 14:30:00"

' Convert SQL DATETIME to Excel =DATEVALUE(LEFT(A1, 10)) + TIMEVALUE(MID(A1, 12, 8))

## Resumo das melhores práticas

## Lista de verificação de tratamento de datas
```text
✅ Always verify date system (1900 vs 1904) before calculations
✅ Use named ranges for constants (EPOCH_DATE, SECONDS_PER_DAY)
✅ Store volatile function results (NOW(), TODAY()) in static cells
✅ Use TEXT() only for final display formatting
✅ Validate date formats before calculations (ISNUMBER, DATEVALUE)
✅ Use NETWORKDAYS for business day calculations
✅ Apply consistent date formatting across workbooks
✅ Document date assumptions (timezones, epoch references)
✅ Test edge cases (leap years, month boundaries)
❌ Don't mix text and date formats in calculations
❌ Don't use volatile functions in large datasets
❌ Don't assume dates are in UTC without documentation
❌ Don't hardcode timezone offsets in formulas
❌ Don't ignore the 1900 leap year bug for historical dates

Solução de problemas comuns

Problema: Datas são exibidas como números

excel
' Solution 1: Format as date
' Select cells > Right-click > Format Cells > Date

' Solution 2: Use TEXT() function
=TEXT(A1, "yyyy-mm-dd")

' Solution 3: Check for text dates
' If ISNUMBER(A1) returns FALSE, use:
=DATEVALUE(A1)

Problema: Cálculos de data incorretos

excel
' Check 1: Verify date system
' Excel Options > Advanced > Use 1904 date system

' Check 2: Ensure consistent units
' Days: =A1 + 7
' Hours: =A1 + (4/24)
' Minutes: =A1 + (30/1440)
' Seconds: =A1 + (45/86400)

' Check 3: Verify date components
' Ensure DATE() has correct arguments: YEAR, MONTH, DAY

Problema: erros de conversão de fuso horário

excel
' Solution: Maintain separate timezone column
A1: Excel timestamp
B1: Timezone offset (e.g., -5 for EST)
C1: =A1 + (B1/24)

Ferramentas relacionadas

Recursos Adicionais

Para processamento de dados em grande escala (>10.000 linhas), considere usar o Power Query ou macros VBA para obter melhor desempenho. As funções do Excel são otimizadas para uso interativo e podem se tornar lentas com conjuntos de dados massivos.