Whiz Tools

Convertisseur de Timestamp Unix

El timestamp Unix és el nombre de segons des de l'1 de gener de 1970 (UTC)

Date & Heure Converties

Convertisseur de Timestamp Unix

Introduction

Un timestamp Unix (également connu sous le nom de temps POSIX ou temps Epoch) est un système pour décrire un point dans le temps. C'est le nombre de secondes qui se sont écoulées depuis le 1er janvier 1970 (minuit UTC/GMT), sans compter les secondes intercalaires. Les timestamps Unix sont largement utilisés dans les systèmes informatiques et les langages de programmation car ils fournissent une représentation compacte et indépendante du langage d'un moment spécifique dans le temps.

Ce convertisseur vous permet de transformer un timestamp Unix en un format de date et d'heure lisible par l'homme. Il prend en charge à la fois les formats horaires de 12 heures (AM/PM) et de 24 heures pour s'adapter aux différentes préférences régionales et personnelles.

Comment fonctionnent les timestamps Unix

Les timestamps Unix sont calculés comme le nombre de secondes écoulées depuis l'Epoch Unix (1er janvier 1970, 00:00:00 UTC). Cela les rend particulièrement utiles pour calculer les différences de temps et pour stocker des dates dans un format compact.

La conversion mathématique d'un timestamp Unix en une date calendrier implique plusieurs étapes :

  1. Commencer avec l'Epoch Unix (1er janvier 1970, 00:00:00 UTC)
  2. Ajouter le nombre de secondes dans le timestamp
  3. Tenir compte des années bissextiles, des longueurs de mois variables et d'autres complexités du calendrier
  4. Appliquer des ajustements de fuseau horaire si nécessaire

Par exemple, le timestamp Unix 1609459200 représente le vendredi 1er janvier 2021, 00:00:00 UTC.

La formule de conversion peut être exprimée comme suit :

Date=Epoch Unix+Timestamp (en secondes)\text{Date} = \text{Epoch Unix} + \text{Timestamp (en secondes)}

La plupart des langages de programmation et des systèmes d'exploitation fournissent des fonctions intégrées pour gérer cette conversion, abstrahant ainsi les calculs complexes du calendrier.

Options de format de temps

Ce convertisseur propose deux options de format de temps :

  1. Format 24 heures (parfois appelé "temps militaire") : Les heures varient de 0 à 23, et il n'y a pas de désignation AM/PM. Par exemple, 15h00 est représenté comme 15:00.

  2. Format 12 heures : Les heures varient de 1 à 12, avec AM (ante meridiem) pour les heures de minuit à midi, et PM (post meridiem) pour les heures de midi à minuit. Par exemple, 15:00 en format 24 heures est représenté comme 3:00 PM.

Le choix entre ces formats est en grande partie une question de convention régionale et de préférence personnelle :

  • Le format 24 heures est couramment utilisé dans la plupart des pays d'Europe, en Amérique latine et en Asie, ainsi que dans les contextes scientifiques, militaires et médicaux dans le monde entier.
  • Le format 12 heures est répandu aux États-Unis, au Canada, en Australie et dans certains autres pays anglophones pour un usage quotidien.

Cas limites et limitations

Lorsqu'on travaille avec des timestamps Unix, il est important d'être conscient de plusieurs cas limites et limitations :

  1. Timestamps négatifs : Ceux-ci représentent des dates avant l'Epoch Unix (1er janvier 1970). Bien que mathématiquement valides, certains systèmes peuvent ne pas gérer correctement les timestamps négatifs.

  2. Le problème de l'année 2038 : Les timestamps Unix sont souvent stockés sous forme d'entiers signés de 32 bits, qui débordent le 19 janvier 2038. Après ce point, les systèmes 32 bits ne pourront pas représenter correctement les temps à moins d'être modifiés pour utiliser un type d'entier plus grand.

  3. Timestamps extrêmement grands : Des dates très éloignées dans le futur peuvent ne pas être représentables dans certains systèmes ou peuvent être traitées de manière incohérente.

  4. Secondes intercalaires : Le temps Unix ne tient pas compte des secondes intercalaires, qui sont parfois ajoutées à l'UTC pour compenser la rotation irrégulière de la Terre. Cela signifie que le temps Unix n'est pas synchronisé avec précision avec le temps astronomique.

  5. Considérations de fuseau horaire : Les timestamps Unix représentent des moments en UTC. La conversion en heure locale nécessite des informations supplémentaires sur le fuseau horaire.

  6. Heure d'été : Lors de la conversion des timestamps en heure locale, il faut tenir compte des complexités des transitions d'heure d'été.

Cas d'utilisation

Les timestamps Unix sont utilisés dans de nombreuses applications à travers l'informatique et la gestion des données :

  1. Enregistrements de base de données : Les timestamps sont couramment utilisés pour enregistrer quand les entrées ont été créées ou modifiées.

  2. Développement web : Les en-têtes HTTP, les cookies et les mécanismes de mise en cache utilisent souvent des timestamps Unix.

  3. Fichiers journaux : Les journaux système enregistrent généralement des événements avec des timestamps Unix pour un ordre chronologique précis.

  4. Systèmes de contrôle de version : Git et d'autres systèmes de contrôle de version utilisent des timestamps pour enregistrer quand les commits ont été effectués.

  5. Réponses API : De nombreuses API web incluent des timestamps dans leurs réponses pour indiquer quand les données ont été générées ou quand les ressources ont été modifiées.

  6. Systèmes de fichiers : Les heures de création et de modification des fichiers sont souvent stockées sous forme de timestamps Unix.

  7. Gestion de session : Les applications web utilisent des timestamps pour déterminer quand les sessions utilisateur doivent expirer.

  8. Analyse de données : Les timestamps fournissent un moyen standardisé de travailler avec des données temporelles dans les applications d'analyse.

Alternatives

Bien que les timestamps Unix soient largement utilisés, il existe des formats de représentation du temps alternatifs qui peuvent être plus appropriés dans certains contextes :

  1. ISO 8601 : Un format de chaîne standardisé (par exemple, "2021-01-01T00:00:00Z") qui est lisible par l'homme tout en maintenant la possibilité de tri. Il est souvent préféré pour l'échange de données et les applications destinées aux utilisateurs.

  2. RFC 3339 : Un profil de l'ISO 8601 utilisé dans les protocoles Internet, avec des exigences de formatage plus strictes.

  3. Formats lisibles par l'homme : Les chaînes de date localisées (par exemple, "1er janvier 2021") sont plus appropriées pour l'interaction directe avec l'utilisateur mais sont moins adaptées au calcul.

  4. Microsoft FILETIME : Une valeur de 64 bits représentant le nombre d'intervalles de 100 nanosecondes depuis le 1er janvier 1601, utilisée dans les systèmes Windows.

  5. Numéro de jour julien : Utilisé en astronomie et dans certaines applications scientifiques, comptant les jours depuis le 1er janvier 4713 avant notre ère.

Le choix du format de temps dépend de facteurs tels que :

  • Précision requise
  • Besoins de lisibilité humaine
  • Contraintes de stockage
  • Compatibilité avec les systèmes existants
  • Plage de dates à représenter

Histoire

Le concept de temps Unix a vu le jour avec le développement du système d'exploitation Unix aux Laboratoires Bell à la fin des années 1960 et au début des années 1970. La décision d'utiliser le 1er janvier 1970 comme Epoch était quelque peu arbitraire mais pratique pour l'époque : elle était suffisamment récente pour minimiser les besoins de stockage pour les dates d'intérêt, mais suffisamment éloignée dans le passé pour être utile pour les données historiques.

L'implémentation originale utilisait un entier signé de 32 bits pour stocker le nombre de secondes, ce qui était adéquat pour la durée de vie attendue des systèmes Unix à l'époque. Cependant, cette décision a conduit au problème de l'année 2038 (parfois appelé "Y2K38" ou le "bug du millénaire Unix"), car les entiers signés de 32 bits ne peuvent représenter des dates que jusqu'au 19 janvier 2038 (03:14:07 UTC).

À mesure que Unix et les systèmes similaires à Unix ont gagné en popularité, le timestamp Unix est devenu un standard de facto pour représenter le temps dans l'informatique. Il a été adopté par de nombreux langages de programmation, bases de données et applications, s'étendant bien au-delà de son environnement Unix d'origine.

Les systèmes modernes utilisent de plus en plus des entiers de 64 bits pour les timestamps, ce qui étend la plage représentable à environ 292 milliards d'années dans les deux directions à partir de l'Epoch, résolvant ainsi efficacement le problème de l'année 2038. Cependant, les systèmes et applications hérités peuvent encore être vulnérables.

La simplicité et l'utilité du timestamp Unix ont assuré sa pertinence continue malgré le développement de formats de représentation du temps plus sophistiqués. Il reste un concept fondamental dans l'informatique, sous-tendant une grande partie de notre infrastructure numérique.

Exemples de code

Voici des exemples de la façon de convertir des timestamps Unix en dates lisibles par l'homme dans divers langages de programmation :

// Conversion de timestamp en JavaScript
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // Créer un nouvel objet Date (JavaScript utilise les millisecondes)
  const date = new Date(timestamp * 1000);
  
  // Options de formatage
  const options = {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long',
    hour: use12Hour ? 'numeric' : '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: use12Hour
  };
  
  // Convertir en chaîne en utilisant le formatage local
  return date.toLocaleString(undefined, options);
}

// Exemple d'utilisation
const timestamp = 1609459200; // 1er janvier 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // Format 24 heures
console.log(convertUnixTimestamp(timestamp, true));  // Format 12 heures
# Conversion de timestamp en Python
import datetime

def convert_unix_timestamp(timestamp, use_12hour=False):
    # Convertir le timestamp Unix en objet datetime
    date = datetime.datetime.fromtimestamp(timestamp)
    
    # Format de la chaîne de date
    if use_12hour:
        format_string = "%A, %B %d, %Y %I:%M:%S %p"  # Format 12 heures avec AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # Format 24 heures
    
    return date.strftime(format_string)

# Exemple d'utilisation
timestamp = 1609459200  # 1er janvier 2021 00:00:00 UTC
print(convert_unix_timestamp(timestamp, False))  # Format 24 heures
print(convert_unix_timestamp(timestamp, True))   # Format 12 heures
<?php
// Conversion de timestamp en PHP
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // Chaîne de format
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // Format 12 heures avec AM/PM
        : 'l, F j, Y H:i:s';   // Format 24 heures
    
    // Convertir et formater la date
    return date($formatString, $timestamp);
}

// Exemple d'utilisation
$timestamp = 1609459200; // 1er janvier 2021 00:00:00 UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // Format 24 heures
echo convertUnixTimestamp($timestamp, true) . "\n";  // Format 12 heures
?>
// Conversion de timestamp en Java
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class UnixTimestampConverter {
    public static String convertUnixTimestamp(long timestamp, boolean use12Hour) {
        // Convertir le timestamp Unix en Instant, puis en LocalDateTime
        Instant instant = Instant.ofEpochSecond(timestamp);
        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // Créer un formateur basé sur le format souhaité
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
        );
        
        // Formater la date
        return dateTime.format(formatter);
    }
    
    public static void main(String[] args) {
        long timestamp = 1609459200; // 1er janvier 2021 00:00:00 UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // Format 24 heures
        System.out.println(convertUnixTimestamp(timestamp, true));  // Format 12 heures
    }
}
// Conversion de timestamp en C#
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // Convertir le timestamp Unix en DateTime
        // Les timestamps Unix sont des secondes depuis 1970-01-01
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // Chaîne de format basée sur la préférence de 12 heures ou 24 heures
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // Format 12 heures avec AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // Format 24 heures
        
        // Retourner la chaîne de date formatée
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // 1er janvier 2021 00:00:00 UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // Format 24 heures
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // Format 12 heures
    }
}
# Conversion de timestamp en Ruby
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # Convertir le timestamp Unix en objet Time
  time = Time.at(timestamp)
  
  # Formater en fonction de la préférence de 12 heures ou 24 heures
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # Format 12 heures avec AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # Format 24 heures
  end
end

# Exemple d'utilisation
timestamp = 1609459200  # 1er janvier 2021 00:00:00 UTC
puts convert_unix_timestamp(timestamp, false)  # Format 24 heures
puts convert_unix_timestamp(timestamp, true)   # Format 12 heures
// Conversion de timestamp en Go
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // Convertir le timestamp Unix en Time
    t := time.Unix(timestamp, 0)
    
    // Chaîne de format basée sur la préférence de 12 heures ou 24 heures
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // Format 12 heures avec AM/PM
    } else {
        formatString += "15:04:05"    // Format 24 heures
    }
    
    // Retourner le temps formaté
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // 1er janvier 2021 00:00:00 UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // Format 24 heures
    fmt.Println(convertUnixTimestamp(timestamp, true))  // Format 12 heures
}
// Conversion de timestamp en Swift
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // Créer une Date à partir du timestamp Unix
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // Créer un DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // Définir le style d'heure en fonction de la préférence de 12 heures ou 24 heures
    if use12Hour {
        formatter.timeStyle = .medium
        formatter.amSymbol = "AM"
        formatter.pmSymbol = "PM"
    } else {
        formatter.timeStyle = .medium
        formatter.dateFormat = formatter.dateFormat?.replacingOccurrences(of: "h:mm:ss a", with: "HH:mm:ss")
    }
    
    // Retourner la date formatée
    return formatter.string(from: date)
}

// Exemple d'utilisation
let timestamp = 1609459200 // 1er janvier 2021 00:00:00 UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // Format 24 heures
print(convertUnixTimestamp(timestamp, use12Hour: true))  // Format 12 heures
# Conversion de timestamp en R
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # Convertir le timestamp Unix en datetime POSIXct
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # Formater en fonction de la préférence de 12 heures ou 24 heures
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # Format 12 heures avec AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # Format 24 heures
  }
  
  # Retourner la chaîne de date formatée
  format(date_time, format_string)
}

# Exemple d'utilisation
timestamp <- 1609459200  # 1er janvier 2021 00:00:00 UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # Format 24 heures
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # Format 12 heures
% Conversion de timestamp en MATLAB
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % Convertir le timestamp Unix en datetime MATLAB
    % Les dates Excel sont des jours depuis 1900-01-01, avec 1 = 1900-01-01
    % Les timestamps Unix sont des secondes depuis 1970-01-01
    
    % D'abord convertir en format de date Excel
    % 25569 est le nombre de jours entre 1900-01-01 et 1970-01-01
    excelDate = (timestamp / 86400) + 25569;
    
    % Formater la date en fonction de la préférence de 12 heures ou 24 heures
    if use12Hour
        formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy h:mm:ss AM/PM');
    else
        formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy hh:mm:ss');
    end
end

% Exemple d'utilisation
timestamp = 1609459200;  % 1er janvier 2021 00:00:00 UTC
disp(convertUnixTimestamp(timestamp, false))  % Format 24 heures
disp(convertUnixTimestamp(timestamp, true))   % Format 12 heures
' Conversion de timestamp en Excel VBA
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' Convertir le timestamp Unix en date/heure Excel
    ' Les dates Excel sont des jours depuis 1900-01-01, avec 1 = 1900-01-01
    ' Les timestamps Unix sont des secondes depuis 1970-01-01
    
    ' D'abord convertir au format de date Excel
    ' 25569 est le nombre de jours entre 1900-01-01 et 1970-01-01
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' Formater la date en fonction de la préférence de 12 heures ou 24 heures
    If use12Hour Then
        ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy h:mm:ss AM/PM")
    Else
        ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy hh:mm:ss")
    End If
End Function

' Utilisation dans une feuille de calcul :
' =ConvertUnixTimestamp(1609459200, TRUE)  ' Format 12 heures
' =ConvertUnixTimestamp(1609459200, FALSE) ' Format 24 heures

Gestion des cas limites

Lorsque vous travaillez avec des timestamps Unix, il est important de gérer correctement les cas limites. Voici des exemples de gestion de certains cas limites courants :

// Gestion des cas limites en JavaScript
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // Vérifier si le timestamp est valide
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "Timestamp invalide";
  }
  
  // Vérifier les timestamps négatifs (dates avant 1970)
  if (timestamp < 0) {
    // Certains navigateurs pourraient ne pas gérer correctement les timestamps négatifs
    // Utiliser une approche plus robuste pour les dates avant 1970
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "Date invalide (avant 1970)";
    }
  }
  
  // Vérifier le problème de Y2K38 (pour les systèmes 32 bits)
  const maxInt32 = 2147483647; // Valeur maximale pour un entier signé de 32 bits
  if (timestamp > maxInt32) {
    // Envisager d'utiliser BigInt pour des timestamps très grands dans le JavaScript moderne
    console.warn("Le timestamp dépasse la limite des entiers de 32 bits (problème Y2K38)");
  }
  
  // Poursuivre avec la conversion normale
  try {
    const date = new Date(timestamp * 1000);
    const options = {
      year: 'numeric',
      month: 'long',
      day: 'numeric',
      weekday: 'long',
      hour: use12Hour ? 'numeric' : '2-digit',
      minute: '2-digit',
      second: '2-digit',
      hour12: use12Hour
    };
    return date.toLocaleString(undefined, options);
  } catch (error) {
    return "Erreur lors de la conversion du timestamp : " + error.message;
  }
}

Références

  1. "Temps Unix." Wikipédia, Fondation Wikimedia, https://fr.wikipedia.org/wiki/Temps_Unix

  2. "Problème de l'année 2038." Wikipédia, Fondation Wikimedia, https://fr.wikipedia.org/wiki/Probl%C3%A8me_de_l%27ann%C3%A9e_2038

  3. Olson, Arthur David. "Les Complexités du Temps Calendrier." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf

  4. "ISO 8601." Wikipédia, Fondation Wikimedia, https://fr.wikipedia.org/wiki/ISO_8601

  5. "RFC 3339 : Date et Heure sur Internet : Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339

  6. Kernighan, Brian W., et Dennis M. Ritchie. "Le Langage de Programmation C." Prentice Hall, 1988.

Feedback