Whiz Tools

Unix Tidsstämpel Konverterare

الطابع الزمني يونكس هو عدد الثواني منذ 1 يناير 1970 (UTC)

Konverterad Datum & Tid

Unix Timestamp Converter

Introduktion

En Unix-tidsstämpel (även känd som POSIX-tid eller Epoch-tid) är ett system för att beskriva en tidpunkt. Det är antalet sekunder som har förflutit sedan den 1 januari 1970 (midnatt UTC/GMT), utan att räkna med skottsekunder. Unix-tidsstämplar används i stor utsträckning i datorsystem och programmeringsspråk eftersom de ger en kompakt, språkoberoende representation av ett specifikt ögonblick i tiden.

Denna omvandlare gör det möjligt för dig att omvandla en Unix-tidsstämpel till ett människoläsbart datum- och tidsformat. Den stöder både 12-timmars (AM/PM) och 24-timmars tidsformat för att tillgodose olika regionala och personliga preferenser.

Hur Unix-tidsstämplar fungerar

Unix-tidsstämplar beräknas som antalet sekunder sedan Unix Epoch (1 januari 1970, 00:00:00 UTC). Detta gör dem särskilt användbara för att beräkna tidsdifferenser och för att lagra datum i ett kompakt format.

Den matematiska omvandlingen från en Unix-tidsstämpel till ett kalenderdatum involverar flera steg:

  1. Börja med Unix Epoch (1 januari 1970, 00:00:00 UTC)
  2. Lägg till antalet sekunder i tidsstämpeln
  3. Ta hänsyn till skottår, varierande månadslängder och andra kalenderkomplexiteter
  4. Tillämpa tidszonsjusteringar om det behövs

Till exempel representerar Unix-tidsstämpeln 1609459200 fredagen den 1 januari 2021, 00:00:00 UTC.

Omvandlingsformeln kan uttryckas som:

Datum=Unix Epoch+Tidssta¨mpel (i sekunder)\text{Datum} = \text{Unix Epoch} + \text{Tidsstämpel (i sekunder)}

De flesta programmeringsspråk och operativsystem tillhandahåller inbyggda funktioner för att hantera denna omvandling, vilket döljer de komplexa kalenderberäkningarna.

Tidsformatalternativ

Denna omvandlare erbjuder två tidsformatalternativ:

  1. 24-timmarsformat (ibland kallat "militär tid"): Timmarna sträcker sig från 0 till 23, och det finns ingen AM/PM-beteckning. Till exempel representeras 15:00 som 15:00.

  2. 12-timmarsformat: Timmarna sträcker sig från 1 till 12, med AM (ante meridiem) för tider från midnatt till middag, och PM (post meridiem) för tider från middag till midnatt. Till exempel representeras 15:00 i 24-timmarsformat som 3:00 PM.

Valet mellan dessa format är i stor utsträckning en fråga om regional konvention och personlig preferens:

  • 24-timmarsformatet används vanligtvis i de flesta av Europa, Latinamerika och Asien, samt i vetenskapliga, militära och medicinska sammanhang världen över.
  • 12-timmarsformatet är utbrett i USA, Kanada, Australien och några andra engelsktalande länder för vardagligt bruk.

Gränsfall och begränsningar

När man arbetar med Unix-tidsstämplar är det viktigt att vara medveten om flera gränsfall och begränsningar:

  1. Negativa tidsstämplar: Dessa representerar datum före Unix Epoch (1 januari 1970). Även om de är matematiskt giltiga, kanske vissa system inte hanterar negativa tidsstämplar korrekt.

  2. År 2038-problemet: Unix-tidsstämplar lagras ofta som 32-bitars signerade heltal, vilket kommer att överflöda den 19 januari 2038. Efter denna tidpunkt kommer 32-bitars system att vara oförmögna att representera tider korrekt om de inte modifieras för att använda en större heltalstyp.

  3. Extremt stora tidsstämplar: Mycket långt in i framtiden kan datum kanske inte representeras i vissa system, eller kan hanteras inkonsekvent.

  4. Skottsekunder: Unix-tid tar inte hänsyn till skottsekunder, som ibland läggs till UTC för att kompensera för jordens oregelbundna rotation. Detta innebär att Unix-tid inte är exakt synkroniserad med astronomisk tid.

  5. Tidszonsöverväganden: Unix-tidsstämplar representerar ögonblick i UTC. Omvandling till lokal tid kräver ytterligare tidszonsinformation.

  6. Sommartid: Vid omvandling av tidsstämplar till lokal tid måste komplexiteten i övergångar till sommartid beaktas.

Användningsområden

Unix-tidsstämplar används i många applikationer inom databehandling och datamanagement:

  1. Databasposter: Tidsstämplar används ofta för att registrera när poster skapades eller ändrades.

  2. Webbutveckling: HTTP-huvuden, cookies och cache-mekanismer använder ofta Unix-tidsstämplar.

  3. Loggfiler: Systemloggar registrerar vanligtvis händelser med Unix-tidsstämplar för exakt kronologisk ordning.

  4. Versionshanteringssystem: Git och andra VCS använder tidsstämplar för att registrera när åtaganden gjordes.

  5. API-svar: Många webb-API:er inkluderar tidsstämplar i sina svar för att ange när data genererades eller när resurser senast ändrades.

  6. Filsystem: Filskapande och ändringstider lagras ofta som Unix-tidsstämplar.

  7. Sessionshantering: Webbapplikationer använder tidsstämplar för att avgöra när användarsessioner ska löpa ut.

  8. Dataanalys: Tidsstämplar ger ett standardiserat sätt att arbeta med tidsdata i analysapplikationer.

Alternativ

Även om Unix-tidsstämplar är allmänt använda, finns det alternativa tidsrepresentationsformat som kan vara mer lämpliga i vissa sammanhang:

  1. ISO 8601: Ett standardiserat strängformat (t.ex. "2021-01-01T00:00:00Z") som är människoläsbart samtidigt som det bibehåller sorteringsbarhet. Det föredras ofta för datautbyte och användarorienterade applikationer.

  2. RFC 3339: En profil av ISO 8601 som används i internetprotokoll, med strängare formateringskrav.

  3. Människoläsbara format: Lokaliserade datumsträngar (t.ex. "1 januari 2021") är mer lämpliga för direkt användarinteraktion men är mindre lämpliga för beräkning.

  4. Microsoft FILETIME: Ett 64-bitars värde som representerar antalet 100-nanosekundsintervall sedan den 1 januari 1601, som används i Windows-system.

  5. Julianska dagnumret: Används inom astronomi och vissa vetenskapliga tillämpningar, räknar dagar sedan den 1 januari 4713 f.Kr.

Valet av tidsformat beror på faktorer som:

  • Krävd precision
  • Behov av människoläsbarhet
  • Lagringsbegränsningar
  • Kompatibilitet med befintliga system
  • Omfånget av datum som behöver representeras

Historia

Konceptet med Unix-tid härstammar från utvecklingen av Unix-operativsystemet vid Bell Labs i slutet av 1960-talet och början av 1970-talet. Beslutet att använda den 1 januari 1970 som epoch var något godtyckligt men praktiskt för tiden—det var tillräckligt nära för att minimera lagringskraven för intressanta datum men tillräckligt långt tillbaka för att vara användbart för historiska data.

Den ursprungliga implementeringen använde ett 32-bitars signerade heltal för att lagra antalet sekunder, vilket var tillräckligt för den förväntade livslängden för Unix-system vid den tiden. Emellertid ledde detta beslut till År 2038-problemet (ibland kallat "Y2K38" eller "Unix Millennium Bug"), eftersom 32-bitars signerade heltal endast kan representera datum fram till den 19 januari 2038 (03:14:07 UTC).

När Unix och Unix-liknande operativsystem blev populära blev Unix-tidsstämpeln en de facto-standard för att representera tid inom databehandling. Den antogs av många programmeringsspråk, databaser och applikationer, vilket sträckte sig långt bortom dess ursprungliga Unix-miljö.

Moderna system använder alltmer 64-bitars heltal för tidsstämplar, vilket utökar det representerbara omfånget till cirka 292 miljarder år i båda riktningarna från epoch, vilket effektivt löser År 2038-problemet. Ändå kan äldre system och applikationer fortfarande vara sårbara.

Unix-tidsstämpelns enkelhet och nytta har säkerställt dess fortsatta relevans trots utvecklingen av mer sofistikerade tidsrepresentationsformat. Det förblir ett grundläggande koncept inom databehandling, som ligger till grund för mycket av vår digitala infrastruktur.

Kodexempel

Här är exempel på hur man konverterar Unix-tidsstämplar till människoläsbara datum i olika programmeringsspråk:

// JavaScript tidsstämpelomvandling
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // Skapa ett nytt Date-objekt (JavaScript använder millisekunder)
  const date = new Date(timestamp * 1000);
  
  // Formateringsalternativ
  const options = {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long',
    hour: use12Hour ? 'numeric' : '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: use12Hour
  };
  
  // Omvandla till sträng med hjälp av lokal formatering
  return date.toLocaleString(undefined, options);
}

// Exempelanvändning
const timestamp = 1609459200; // 1 januari 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // 24-timmarsformat
console.log(convertUnixTimestamp(timestamp, true));  // 12-timmarsformat
# Python tidsstämpelomvandling
import datetime

def convert_unix_timestamp(timestamp, use_12hour=False):
    # Konvertera Unix-tidsstämpel till datetime-objekt
    date = datetime.datetime.fromtimestamp(timestamp)
    
    # Formatera datumsträngen
    if use_12hour:
        format_string = "%A, %B %d, %Y %I:%M:%S %p"  # 12-timmarsformat med AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # 24-timmarsformat
    
    return date.strftime(format_string)

# Exempelanvändning
timestamp = 1609459200  # 1 januari 2021 00:00:00 UTC
print(convert_unix_timestamp(timestamp, False))  # 24-timmarsformat
print(convert_unix_timestamp(timestamp, True))   # 12-timmarsformat
<?php
// PHP tidsstämpelomvandling
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // Formateringssträng
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // 12-timmarsformat med AM/PM
        : 'l, F j, Y H:i:s';   // 24-timmarsformat
    
    // Konvertera och formatera datumet
    return date($formatString, $timestamp);
}

// Exempelanvändning
$timestamp = 1609459200; // 1 januari 2021 00:00:00 UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // 24-timmarsformat
echo convertUnixTimestamp($timestamp, true) . "\n";  // 12-timmarsformat
?>
// Java tidsstämpelomvandling
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) {
        // Konvertera Unix-tidsstämpel till Instant, sedan till LocalDateTime
        Instant instant = Instant.ofEpochSecond(timestamp);
        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // Skapa formatterare baserat på önskat format
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
        );
        
        // Formatera datumet
        return dateTime.format(formatter);
    }
    
    public static void main(String[] args) {
        long timestamp = 1609459200; // 1 januari 2021 00:00:00 UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // 24-timmarsformat
        System.out.println(convertUnixTimestamp(timestamp, true));  // 12-timmarsformat
    }
}
// C# tidsstämpelomvandling
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // Konvertera Unix-tidsstämpel till DateTime
        // Unix-tidsstämpel är sekunder sedan 1970-01-01
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // Formateringssträng baserat på 12-timmars eller 24-timmars preferens
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // 12-timmarsformat med AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // 24-timmarsformat
        
        // Returnera formaterad datumsträng
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // 1 januari 2021 00:00:00 UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24-timmarsformat
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // 12-timmarsformat
    }
}
# Ruby tidsstämpelomvandling
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # Konvertera Unix-tidsstämpel till Time-objekt
  time = Time.at(timestamp)
  
  # Formatera baserat på 12-timmars eller 24-timmars preferens
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # 12-timmarsformat med AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # 24-timmarsformat
  end
end

# Exempelanvändning
timestamp = 1609459200  # 1 januari 2021 00:00:00 UTC
puts convert_unix_timestamp(timestamp, false)  # 24-timmarsformat
puts convert_unix_timestamp(timestamp, true)   # 12-timmarsformat
// Go tidsstämpelomvandling
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // Konvertera Unix-tidsstämpel till Time
    t := time.Unix(timestamp, 0)
    
    // Formateringssträng baserat på 12-timmars eller 24-timmars preferens
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // 12-timmarsformat med AM/PM
    } else {
        formatString += "15:04:05"    // 24-timmarsformat
    }
    
    // Returnera formaterad tid
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // 1 januari 2021 00:00:00 UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // 24-timmarsformat
    fmt.Println(convertUnixTimestamp(timestamp, true))  // 12-timmarsformat
}
// Swift tidsstämpelomvandling
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // Skapa Date från Unix-tidsstämpel
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // Skapa DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // Ställ in tidsstil baserat på 12-timmars eller 24-timmars preferens
    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")
    }
    
    // Returnera formaterat datum
    return formatter.string(from: date)
}

// Exempelanvändning
let timestamp = 1609459200 // 1 januari 2021 00:00:00 UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24-timmarsformat
print(convertUnixTimestamp(timestamp, use12Hour: true))  // 12-timmarsformat
# R tidsstämpelomvandling
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # Konvertera Unix-tidsstämpel till POSIXct datetime
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # Formatera baserat på 12-timmars eller 24-timmars preferens
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # 12-timmarsformat med AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # 24-timmarsformat
  }
  
  # Returnera formaterad datumsträng
  format(date_time, format_string)
}

# Exempelanvändning
timestamp <- 1609459200  # 1 januari 2021 00:00:00 UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # 24-timmarsformat
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # 12-timmarsformat
% MATLAB tidsstämpelomvandling
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % Konvertera Unix-tidsstämpel till MATLAB datetime
    % MATLAB-datum är dagar sedan 1900-01-01, med 1 = 1900-01-01
    % Unix-tidsstämpel är sekunder sedan 1970-01-01
    
    % Först konvertera till Excel datumformat
    % 25569 är antalet dagar mellan 1900-01-01 och 1970-01-01
    excelDate = (timestamp / 86400) + 25569;
    
    % Formatera baserat på 12-timmars eller 24-timmars preferens
    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

% Exempelanvändning
timestamp = 1609459200;  % 1 januari 2021 00:00:00 UTC
disp(convertUnixTimestamp(timestamp, false))  % 24-timmarsformat
disp(convertUnixTimestamp(timestamp, true))   % 12-timmarsformat
' Excel VBA tidsstämpelomvandling
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' Konvertera Unix-tidsstämpel till Excel datum/tid
    ' Excel-datum är dagar sedan 1900-01-01, med 1 = 1900-01-01
    ' Unix-tidsstämpel är sekunder sedan 1970-01-01
    
    ' Först konvertera till Excel datumformat
    ' 25569 är antalet dagar mellan 1900-01-01 och 1970-01-01
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' Formatera datum baserat på 12-timmars eller 24-timmars preferens
    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

' Användning i ett kalkylblad:
' =ConvertUnixTimestamp(1609459200, TRUE)  ' 12-timmarsformat
' =ConvertUnixTimestamp(1609459200, FALSE) ' 24-timmarsformat

Hantering av gränsfall

När man arbetar med Unix-tidsstämplar är det viktigt att hantera gränsfall korrekt. Här är exempel på hantering av några vanliga gränsfall:

// JavaScript hantering av gränsfall
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // Kontrollera om tidsstämpeln är giltig
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "Ogiltig tidsstämpel";
  }
  
  // Kontrollera för negativa tidsstämplar (datum före 1970)
  if (timestamp < 0) {
    // Vissa webbläsare kanske inte hanterar negativa tidsstämplar korrekt
    // Använd en mer robust metod för datum före 1970
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "Ogiltigt datum (före 1970)";
    }
  }
  
  // Kontrollera för Y2K38-problemet (för 32-bitars system)
  const maxInt32 = 2147483647; // Maximalt värde för 32-bitars signerad heltal
  if (timestamp > maxInt32) {
    // Överväg att använda BigInt för mycket stora tidsstämplar i modern JavaScript
    console.warn("Tidsstämpeln överskrider gränsen för 32-bitars heltal (Y2K38-problem)");
  }
  
  // Fortsätt med normal omvandling
  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 "Fel vid omvandling av tidsstämpel: " + error.message;
  }
}

Referenser

  1. "Unix Time." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time

  2. "År 2038-problemet." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem

  3. Olson, Arthur David. "The Complexities of Calendrical Time." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf

  4. "ISO 8601." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/ISO_8601

  5. "RFC 3339: Date and Time on the Internet: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339

  6. Kernighan, Brian W., och Dennis M. Ritchie. "The C Programming Language." Prentice Hall, 1988.

Feedback