Pengonversi Timestamp Unix ke Tanggal: Dukungan Format 12/24 Jam
Konversi timestamp Unix menjadi tanggal dan waktu yang mudah dibaca. Pilih antara format waktu 12 jam dan 24 jam dengan alat konversi yang sederhana dan ramah pengguna ini.
Pengonversi Timestamp Unix
Tanggal & Waktu yang Dikonversi
Dokumentasi
Konverter Stempel Unix
Pendahuluan
Stempel Unix (juga dikenal sebagai waktu POSIX atau waktu Epoch) adalah sistem untuk menggambarkan suatu titik dalam waktu. Ini adalah jumlah detik yang telah berlalu sejak 1 Januari 1970 (tengah malam UTC/GMT), tanpa menghitung detik kabisat. Stempel Unix banyak digunakan dalam sistem komputer dan bahasa pemrograman karena memberikan representasi yang ringkas dan independen bahasa dari momen tertentu dalam waktu.
Konverter ini memungkinkan Anda untuk mengubah stempel Unix menjadi format tanggal dan waktu yang dapat dibaca manusia. Ini mendukung format waktu 12 jam (AM/PM) dan 24 jam untuk mengakomodasi berbagai preferensi regional dan pribadi.
Cara Kerja Stempel Unix
Stempel Unix dihitung sebagai jumlah detik sejak Epoch Unix (1 Januari 1970, 00:00:00 UTC). Ini membuatnya sangat berguna untuk menghitung perbedaan waktu dan untuk menyimpan tanggal dalam format yang ringkas.
Konversi matematis dari stempel Unix ke tanggal kalender melibatkan beberapa langkah:
- Mulai dengan Epoch Unix (1 Januari 1970, 00:00:00 UTC)
- Tambahkan jumlah detik dalam stempel
- Perhitungkan tahun kabisat, variasi panjang bulan, dan kompleksitas kalender lainnya
- Terapkan penyesuaian zona waktu jika diperlukan
Sebagai contoh, stempel Unix 1609459200
mewakili Jumat, 1 Januari 2021, 00:00:00 UTC.
Rumus konversi dapat dinyatakan sebagai:
Sebagian besar bahasa pemrograman dan sistem operasi menyediakan fungsi bawaan untuk menangani konversi ini, menyembunyikan perhitungan kalender yang kompleks.
Opsi Format Waktu
Konverter ini menawarkan dua opsi format waktu:
-
Format 24 jam (kadang-kadang disebut "waktu militer"): Jam berkisar dari 0 hingga 23, dan tidak ada penunjukan AM/PM. Misalnya, 3:00 PM diwakili sebagai 15:00.
-
Format 12 jam: Jam berkisar dari 1 hingga 12, dengan AM (ante meridiem) untuk waktu dari tengah malam hingga siang, dan PM (post meridiem) untuk waktu dari siang hingga tengah malam. Misalnya, 15:00 dalam format 24 jam diwakili sebagai 3:00 PM.
Pilihan antara format ini sebagian besar merupakan masalah konvensi regional dan preferensi pribadi:
- Format 24 jam umum digunakan di sebagian besar Eropa, Amerika Latin, dan Asia, serta dalam konteks ilmiah, militer, dan medis di seluruh dunia.
- Format 12 jam umum di Amerika Serikat, Kanada, Australia, dan beberapa negara berbahasa Inggris lainnya untuk penggunaan sehari-hari.
Kasus Tepi dan Batasan
Saat bekerja dengan stempel Unix, penting untuk menyadari beberapa kasus tepi dan batasan:
-
Stempel negatif: Ini mewakili tanggal sebelum Epoch Unix (1 Januari 1970). Meskipun secara matematis valid, beberapa sistem mungkin tidak menangani stempel negatif dengan benar.
-
Masalah Tahun 2038: Stempel Unix sering disimpan sebagai integer bertanda 32-bit, yang akan meluap pada 19 Januari 2038. Setelah titik ini, sistem 32-bit tidak akan dapat merepresentasikan waktu dengan benar kecuali dimodifikasi untuk menggunakan tipe integer yang lebih besar.
-
Stempel yang sangat besar: Tanggal yang sangat jauh di masa depan mungkin tidak dapat direpresentasikan dalam beberapa sistem, atau mungkin ditangani secara tidak konsisten.
-
Detik kabisat: Waktu Unix tidak memperhitungkan detik kabisat, yang kadang-kadang ditambahkan ke UTC untuk mengompensasi rotasi Bumi yang tidak teratur. Ini berarti waktu Unix tidak disinkronkan secara tepat dengan waktu astronomis.
-
Pertimbangan zona waktu: Stempel Unix mewakili momen dalam UTC. Mengonversi ke waktu lokal memerlukan informasi zona waktu tambahan.
-
Waktu Musim Panas: Saat mengonversi stempel ke waktu lokal, kompleksitas transisi Waktu Musim Panas harus dipertimbangkan.
Kasus Penggunaan
Stempel Unix digunakan dalam berbagai aplikasi di seluruh komputasi dan manajemen data:
-
Catatan Basis Data: Stempel sering digunakan untuk mencatat kapan entri dibuat atau dimodifikasi.
-
Pengembangan Web: Header HTTP, cookie, dan mekanisme caching sering menggunakan stempel Unix.
-
File Log: Log sistem biasanya mencatat peristiwa dengan stempel Unix untuk urutan kronologis yang tepat.
-
Sistem Kontrol Versi: Git dan VCS lainnya menggunakan stempel untuk mencatat kapan komit dilakukan.
-
Respons API: Banyak API web menyertakan stempel dalam respons mereka untuk menunjukkan kapan data dihasilkan atau kapan sumber daya terakhir dimodifikasi.
-
Sistem Berkas: Waktu pembuatan dan modifikasi berkas sering disimpan sebagai stempel Unix.
-
Manajemen Sesi: Aplikasi web menggunakan stempel untuk menentukan kapan sesi pengguna harus kedaluwarsa.
-
Analisis Data: Stempel menyediakan cara standar untuk bekerja dengan data temporal dalam aplikasi analitik.
Alternatif
Meskipun stempel Unix banyak digunakan, ada format representasi waktu alternatif yang mungkin lebih cocok dalam konteks tertentu:
-
ISO 8601: Format string standar (misalnya, "2021-01-01T00:00:00Z") yang dapat dibaca manusia sambil mempertahankan keterurutan. Ini sering lebih disukai untuk pertukaran data dan aplikasi yang menghadapi pengguna.
-
RFC 3339: Profil ISO 8601 yang digunakan dalam protokol internet, dengan persyaratan format yang lebih ketat.
-
Format yang dapat dibaca manusia: String tanggal terlokalisasi (misalnya, "1 Januari 2021") lebih cocok untuk interaksi langsung dengan pengguna tetapi kurang cocok untuk perhitungan.
-
Microsoft FILETIME: Nilai 64-bit yang mewakili jumlah interval 100-nanodetik sejak 1 Januari 1601, digunakan dalam sistem Windows.
-
Nomor Hari Julian: Digunakan dalam astronomi dan beberapa aplikasi ilmiah, menghitung hari sejak 1 Januari 4713 SM.
Pilihan format waktu tergantung pada faktor-faktor seperti:
- Presisi yang dibutuhkan
- Kebutuhan keterbacaan manusia
- Kendala penyimpanan
- Kompatibilitas dengan sistem yang ada
- Rentang tanggal yang perlu direpresentasikan
Sejarah
Konsep waktu Unix berasal dari pengembangan sistem operasi Unix di Bell Labs pada akhir 1960-an dan awal 1970-an. Keputusan untuk menggunakan 1 Januari 1970 sebagai epoch agak sewenang-wenang tetapi praktis pada saat itu—itu cukup baru untuk meminimalkan kebutuhan penyimpanan untuk tanggal yang menarik tetapi cukup jauh di masa lalu untuk berguna untuk data historis.
Implementasi asli menggunakan integer bertanda 32-bit untuk menyimpan jumlah detik, yang memadai untuk masa hidup sistem Unix yang diharapkan pada waktu itu. Namun, keputusan ini menyebabkan Masalah Tahun 2038 (kadang-kadang disebut "Y2K38" atau "Bug Milenium Unix"), karena integer bertanda 32-bit hanya dapat merepresentasikan tanggal hingga 19 Januari 2038 (03:14:07 UTC).
Ketika Unix dan sistem mirip Unix menjadi populer, stempel Unix menjadi standar de facto untuk merepresentasikan waktu dalam komputasi. Itu diadopsi oleh banyak bahasa pemrograman, basis data, dan aplikasi, melampaui lingkungan Unix aslinya.
Sistem modern semakin menggunakan integer 64-bit untuk stempel, yang memperpanjang rentang yang dapat direpresentasikan hingga sekitar 292 miliar tahun ke kedua arah dari epoch, secara efektif menyelesaikan Masalah Tahun 2038. Namun, sistem dan aplikasi lama mungkin masih rentan.
Kesederhanaan dan kegunaan stempel Unix telah memastikan relevansinya yang berkelanjutan meskipun pengembangan format representasi waktu yang lebih canggih. Ini tetap menjadi konsep dasar dalam komputasi, mendasari banyak infrastruktur digital kita.
Contoh Kode
Berikut adalah contoh cara mengonversi stempel Unix menjadi tanggal yang dapat dibaca manusia dalam berbagai bahasa pemrograman:
1// Konversi stempel JavaScript
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // Buat objek Date baru (JavaScript menggunakan milidetik)
4 const date = new Date(timestamp * 1000);
5
6 // Opsi format
7 const options = {
8 year: 'numeric',
9 month: 'long',
10 day: 'numeric',
11 weekday: 'long',
12 hour: use12Hour ? 'numeric' : '2-digit',
13 minute: '2-digit',
14 second: '2-digit',
15 hour12: use12Hour
16 };
17
18 // Konversi menjadi string menggunakan format lokal
19 return date.toLocaleString(undefined, options);
20}
21
22// Contoh penggunaan
23const timestamp = 1609459200; // 1 Januari 2021 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // Format 24 jam
25console.log(convertUnixTimestamp(timestamp, true)); // Format 12 jam
26
1# Konversi stempel Python
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Konversi stempel Unix menjadi objek datetime
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # Format string tanggal
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # Format 12 jam dengan AM/PM
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # Format 24 jam
13
14 return date.strftime(format_string)
15
16# Contoh penggunaan
17timestamp = 1609459200 # 1 Januari 2021 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # Format 24 jam
19print(convert_unix_timestamp(timestamp, True)) # Format 12 jam
20
1<?php
2// Konversi stempel PHP
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // Format string
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // Format 12 jam dengan AM/PM
7 : 'l, F j, Y H:i:s'; // Format 24 jam
8
9 // Konversi dan format tanggal
10 return date($formatString, $timestamp);
11}
12
13// Contoh penggunaan
14$timestamp = 1609459200; // 1 Januari 2021 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // Format 24 jam
16echo convertUnixTimestamp($timestamp, true) . "\n"; // Format 12 jam
17?>
18
1// Konversi stempel Java
2import java.time.Instant;
3import java.time.LocalDateTime;
4import java.time.ZoneId;
5import java.time.format.DateTimeFormatter;
6
7public class UnixTimestampConverter {
8 public static String convertUnixTimestamp(long timestamp, boolean use12Hour) {
9 // Konversi stempel Unix menjadi Instant, lalu ke LocalDateTime
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // Buat formatter berdasarkan format yang diinginkan
14 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
15 use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
16 );
17
18 // Format tanggal
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 1 Januari 2021 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // Format 24 jam
25 System.out.println(convertUnixTimestamp(timestamp, true)); // Format 12 jam
26 }
27}
28
1// Konversi stempel C#
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Konversi stempel Unix menjadi DateTime
9 // Stempel Unix adalah detik sejak 1970-01-01
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // Format string berdasarkan preferensi 12 jam atau 24 jam
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // Format 12 jam dengan AM/PM
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // Format 24 jam
16
17 // Kembalikan string tanggal yang diformat
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 1 Januari 2021 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // Format 24 jam
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // Format 12 jam
26 }
27}
28
1# Konversi stempel Ruby
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Konversi stempel Unix menjadi objek Time
6 time = Time.at(timestamp)
7
8 # Format berdasarkan preferensi 12 jam atau 24 jam
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # Format 12 jam dengan AM/PM
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # Format 24 jam
13 end
14end
15
16# Contoh penggunaan
17timestamp = 1609459200 # 1 Januari 2021 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # Format 24 jam
19puts convert_unix_timestamp(timestamp, true) # Format 12 jam
20
1// Konversi stempel Go
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Konversi stempel Unix menjadi Time
11 t := time.Unix(timestamp, 0)
12
13 // Format string berdasarkan preferensi 12 jam atau 24 jam
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // Format 12 jam dengan AM/PM
17 } else {
18 formatString += "15:04:05" // Format 24 jam
19 }
20
21 // Kembalikan waktu yang diformat
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 1 Januari 2021 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // Format 24 jam
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // Format 12 jam
29}
30
1// Konversi stempel Swift
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Buat Date dari stempel Unix
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // Buat DateFormatter
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // Atur gaya waktu berdasarkan preferensi 12 jam atau 24 jam
13 if use12Hour {
14 formatter.timeStyle = .medium
15 formatter.amSymbol = "AM"
16 formatter.pmSymbol = "PM"
17 } else {
18 formatter.timeStyle = .medium
19 formatter.dateFormat = formatter.dateFormat?.replacingOccurrences(of: "h:mm:ss a", with: "HH:mm:ss")
20 }
21
22 // Kembalikan tanggal yang diformat
23 return formatter.string(from: date)
24}
25
26// Contoh penggunaan
27let timestamp = 1609459200 // 1 Januari 2021 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // Format 24 jam
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // Format 12 jam
30
1# Konversi stempel R
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Konversi stempel Unix menjadi datetime POSIXct
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # Format berdasarkan preferensi 12 jam atau 24 jam
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # Format 12 jam dengan AM/PM
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # Format 24 jam
11 }
12
13 # Kembalikan string tanggal yang diformat
14 format(date_time, format_string)
15}
16
17# Contoh penggunaan
18timestamp <- 1609459200 # 1 Januari 2021 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # Format 24 jam
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # Format 12 jam
21
1% Konversi stempel MATLAB
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Konversi stempel Unix menjadi datetime MATLAB
4 % Tanggal MATLAB adalah hari sejak 1900-01-01, dengan 1 = 1900-01-01
5 % Stempel Unix adalah detik sejak 1970-01-01
6
7 % Pertama konversi ke format tanggal Excel
8 % 25569 adalah jumlah hari antara 1900-01-01 dan 1970-01-01
9 excelDate = (timestamp / 86400) + 25569;
10
11 % Format berdasarkan preferensi 12 jam atau 24 jam
12 if use12Hour
13 formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy h:mm:ss AM/PM');
14 else
15 formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy hh:mm:ss');
16 end
17end
18
19% Contoh penggunaan
20timestamp = 1609459200; % 1 Januari 2021 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % Format 24 jam
22disp(convertUnixTimestamp(timestamp, true)) % Format 12 jam
23
1' Konversi stempel Excel VBA
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Konversi stempel Unix menjadi tanggal/waktu Excel
4 ' Tanggal Excel adalah hari sejak 1900-01-01, dengan 1 = 1900-01-01
5 ' Stempel Unix adalah detik sejak 1970-01-01
6
7 ' Pertama konversi ke format tanggal Excel
8 ' 25569 adalah jumlah hari antara 1900-01-01 dan 1970-01-01
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' Format tanggal berdasarkan preferensi 12 jam atau 24 jam
13 If use12Hour Then
14 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy h:mm:ss AM/PM")
15 Else
16 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy hh:mm:ss")
17 End If
18End Function
19
20' Penggunaan di worksheet:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' Format 12 jam
22' =ConvertUnixTimestamp(1609459200, FALSE) ' Format 24 jam
23
Menangani Kasus Tepi
Saat bekerja dengan stempel Unix, penting untuk menangani kasus tepi dengan benar. Berikut adalah contoh menangani beberapa kasus tepi umum:
1// Penanganan kasus tepi JavaScript
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Periksa apakah stempel valid
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "Stempel tidak valid";
6 }
7
8 // Periksa stempel negatif (tanggal sebelum 1970)
9 if (timestamp < 0) {
10 // Beberapa browser mungkin tidak menangani stempel negatif dengan benar
11 // Gunakan pendekatan yang lebih kuat untuk tanggal sebelum 1970
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "Tanggal tidak valid (sebelum 1970)";
15 }
16 }
17
18 // Periksa masalah Y2K38 (untuk sistem 32-bit)
19 const maxInt32 = 2147483647; // Nilai maksimum untuk integer bertanda 32-bit
20 if (timestamp > maxInt32) {
21 // Pertimbangkan menggunakan BigInt untuk stempel yang sangat besar di JavaScript modern
22 console.warn("Stempel melebihi batas integer 32-bit (masalah Y2K38)");
23 }
24
25 // Lanjutkan dengan konversi normal
26 try {
27 const date = new Date(timestamp * 1000);
28 const options = {
29 year: 'numeric',
30 month: 'long',
31 day: 'numeric',
32 weekday: 'long',
33 hour: use12Hour ? 'numeric' : '2-digit',
34 minute: '2-digit',
35 second: '2-digit',
36 hour12: use12Hour
37 };
38 return date.toLocaleString(undefined, options);
39 } catch (error) {
40 return "Kesalahan mengonversi stempel: " + error.message;
41 }
42}
43
Referensi
-
"Waktu Unix." Wikipedia, Yayasan Wikimedia, https://en.wikipedia.org/wiki/Unix_time
-
"Masalah Tahun 2038." Wikipedia, Yayasan Wikimedia, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Kompleksitas Waktu Kalendris." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Yayasan Wikimedia, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Tanggal dan Waktu di Internet: Stempel Waktu." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., dan Dennis M. Ritchie. "Bahasa Pemrograman C." Prentice Hall, 1988.
Umpan Balik
Klik toast umpan balik untuk mulai memberikan umpan balik tentang alat ini
Alat Terkait
Temukan lebih banyak alat yang mungkin berguna untuk alur kerja Anda