Penukar Timestamp Unix kepada Tarikh: Sokongan Format 12/24 Jam
Tukar timestamp Unix kepada tarikh dan masa yang boleh dibaca oleh manusia. Pilih antara format masa 12 jam dan 24 jam dengan alat penukar yang mudah dan mesra pengguna ini.
Penukar Timestamp Unix
Tarikh & Waktu yang Ditukar
Dokumentasi
Penukar Timestamp Unix
Pengenalan
Timestamp Unix (juga dikenali sebagai masa POSIX atau masa Epoch) adalah sistem untuk menerangkan satu titik dalam masa. Ia adalah bilangan saat yang telah berlalu sejak 1 Januari 1970 (tengah malam UTC/GMT), tidak mengira saat lompat. Timestamp Unix digunakan secara meluas dalam sistem komputer dan bahasa pengaturcaraan kerana ia menyediakan representasi yang padat dan bebas bahasa bagi satu momen tertentu dalam masa.
Penukar ini membolehkan anda menukar timestamp Unix kepada format tarikh dan masa yang boleh dibaca manusia. Ia menyokong kedua-dua format masa 12-jam (AM/PM) dan 24-jam untuk memenuhi pelbagai pilihan serantau dan peribadi.
Cara Kerja Timestamp Unix
Timestamp Unix dikira sebagai bilangan saat sejak Epoch Unix (1 Januari 1970, 00:00:00 UTC). Ini menjadikannya sangat berguna untuk mengira perbezaan masa dan untuk menyimpan tarikh dalam format yang padat.
Penukaran matematik dari timestamp Unix kepada tarikh kalendar melibatkan beberapa langkah:
- Mulakan dengan Epoch Unix (1 Januari 1970, 00:00:00 UTC)
- Tambah bilangan saat dalam timestamp
- Ambil kira tahun lompat, panjang bulan yang berbeza, dan kompleksiti kalendar lain
- Terapkan penyesuaian zon waktu jika perlu
Sebagai contoh, timestamp Unix 1609459200
mewakili Jumaat, 1 Januari 2021, 00:00:00 UTC.
Formula penukaran boleh dinyatakan sebagai:
Kebanyakan bahasa pengaturcaraan dan sistem operasi menyediakan fungsi terbina dalam untuk mengendalikan penukaran ini, menyembunyikan pengiraan kalendar yang kompleks.
Pilihan Format Masa
Penukar ini menawarkan dua pilihan format masa:
-
Format 24-jam (kadang-kadang dipanggil "masa tentera"): Jam berkisar dari 0 hingga 23, dan tiada penetapan AM/PM. Sebagai contoh, 3:00 PM diwakili sebagai 15:00.
-
Format 12-jam: Jam berkisar dari 1 hingga 12, dengan AM (ante meridiem) untuk masa dari tengah malam hingga tengah hari, dan PM (post meridiem) untuk masa dari tengah hari hingga tengah malam. Sebagai contoh, 15:00 dalam format 24-jam diwakili sebagai 3:00 PM.
Pilihan antara format-format ini adalah sebahagian besar bergantung kepada konvensyen serantau dan pilihan peribadi:
- Format 24-jam digunakan secara umum di kebanyakan Eropah, Amerika Latin, dan Asia, serta dalam konteks saintifik, tentera, dan perubatan di seluruh dunia.
- Format 12-jam adalah lazim di Amerika Syarikat, Kanada, Australia, dan beberapa negara berbahasa Inggeris yang lain untuk penggunaan sehari-hari.
Kes Khas dan Had
Apabila bekerja dengan timestamp Unix, adalah penting untuk menyedari beberapa kes khas dan had:
-
Timestamp negatif: Ini mewakili tarikh sebelum Epoch Unix (1 Januari 1970). Walaupun secara matematik sah, beberapa sistem mungkin tidak mengendalikan timestamp negatif dengan betul.
-
Masalah Tahun 2038: Timestamp Unix sering disimpan sebagai integer bertanda 32-bit, yang akan melimpah pada 19 Januari 2038. Selepas titik ini, sistem 32-bit tidak akan dapat mewakili masa dengan betul melainkan diubah untuk menggunakan jenis integer yang lebih besar.
-
Timestamp yang sangat besar: Tarikh masa depan yang sangat jauh mungkin tidak dapat diwakili dalam beberapa sistem, atau mungkin ditangani secara tidak konsisten.
-
Saat lompat: Masa Unix tidak mengambil kira saat lompat, yang kadang-kadang ditambah kepada UTC untuk mengimbangi putaran Bumi yang tidak teratur. Ini bermakna masa Unix tidak diselaraskan dengan tepat dengan masa astronomi.
-
Pertimbangan zon waktu: Timestamp Unix mewakili momen dalam UTC. Menukar kepada waktu tempatan memerlukan maklumat zon waktu tambahan.
-
Waktu Penjimatan Siang: Apabila menukar timestamp kepada waktu tempatan, kompleksiti transisi Waktu Penjimatan Siang mesti dipertimbangkan.
Kes Penggunaan
Timestamp Unix digunakan dalam pelbagai aplikasi di seluruh pengkomputeran dan pengurusan data:
-
Rekod Pangkalan Data: Timestamp biasanya digunakan untuk merekod apabila entri dibuat atau diubah.
-
Pembangunan Web: Header HTTP, kuki, dan mekanisme caching sering menggunakan timestamp Unix.
-
Fail Log: Log sistem biasanya merekodkan peristiwa dengan timestamp Unix untuk urutan kronologi yang tepat.
-
Sistem Kawalan Versi: Git dan sistem VCS lain menggunakan timestamp untuk merekodkan bila komit dibuat.
-
Respons API: Banyak API web menyertakan timestamp dalam respons mereka untuk menunjukkan bila data dihasilkan atau bila sumber terakhir diubah.
-
Sistem Fail: Masa penciptaan dan pengubahsuaian fail sering disimpan sebagai timestamp Unix.
-
Pengurusan Sesi: Aplikasi web menggunakan timestamp untuk menentukan bila sesi pengguna harus tamat.
-
Analisis Data: Timestamp menyediakan cara yang standard untuk bekerja dengan data temporal dalam aplikasi analitik.
Alternatif
Walaupun timestamp Unix digunakan secara meluas, terdapat format representasi masa alternatif yang mungkin lebih sesuai dalam konteks tertentu:
-
ISO 8601: Format string standard (contohnya, "2021-01-01T00:00:00Z") yang boleh dibaca manusia sambil mengekalkan kebolehsortiran. Ia sering lebih disukai untuk pertukaran data dan aplikasi yang menghadapi pengguna.
-
RFC 3339: Profil ISO 8601 yang digunakan dalam protokol internet, dengan keperluan format yang lebih ketat.
-
Format yang boleh dibaca manusia: Rentetan tarikh yang dilokalisasi (contohnya, "1 Januari 2021") lebih sesuai untuk interaksi langsung dengan pengguna tetapi kurang sesuai untuk pengiraan.
-
Microsoft FILETIME: Nilai 64-bit yang mewakili bilangan interval 100-nanodetik sejak 1 Januari 1601, digunakan dalam sistem Windows.
-
Nombor Hari Julian: Digunakan dalam astronomi dan beberapa aplikasi saintifik, mengira hari sejak 1 Januari 4713 SM.
Pilihan format masa bergantung kepada faktor seperti:
- Ketepatan yang diperlukan
- Keperluan kebolehbaca manusia
- Kekangan penyimpanan
- Keserasian dengan sistem sedia ada
- Julat tarikh yang perlu diwakili
Sejarah
Konsep masa Unix berasal dari pembangunan sistem operasi Unix di Bell Labs pada akhir 1960-an dan awal 1970-an. Keputusan untuk menggunakan 1 Januari 1970 sebagai epoch adalah agak arbitrari tetapi praktikal pada masa itu—ia cukup baru untuk meminimumkan keperluan penyimpanan untuk tarikh yang menarik tetapi cukup jauh ke masa lalu untuk berguna bagi data sejarah.
Pelaksanaan asal menggunakan integer bertanda 32-bit untuk menyimpan bilangan saat, yang mencukupi untuk jangka hayat sistem Unix yang dijangkakan pada masa itu. Walau bagaimanapun, keputusan ini membawa kepada Masalah Tahun 2038 (kadang-kadang dipanggil "Y2K38" atau "Bug Milenium Unix"), kerana integer bertanda 32-bit hanya boleh mewakili tarikh sehingga 1 Januari 2038 (03:14:07 UTC).
Apabila Unix dan sistem yang serupa Unix semakin popular, timestamp Unix menjadi standard de facto untuk mewakili masa dalam pengkomputeran. Ia diterima pakai oleh banyak bahasa pengaturcaraan, pangkalan data, dan aplikasi, melampaui persekitaran Unix asalnya.
Sistem moden semakin menggunakan integer 64-bit untuk timestamp, yang memperluaskan julat yang boleh diwakili kepada kira-kira 292 bilion tahun ke kedua-dua arah dari epoch, secara efektif menyelesaikan Masalah Tahun 2038. Walau bagaimanapun, sistem dan aplikasi warisan mungkin masih terdedah.
Kesederhanaan dan utiliti timestamp Unix telah memastikan relevansinya yang berterusan walaupun dengan perkembangan format representasi masa yang lebih canggih. Ia kekal sebagai konsep asas dalam pengkomputeran, menyokong banyak infrastruktur digital kita.
Contoh Kod
Berikut adalah contoh cara menukar timestamp Unix kepada tarikh yang boleh dibaca manusia dalam pelbagai bahasa pengaturcaraan:
1// Penukaran timestamp JavaScript
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // Buat objek Date baru (JavaScript menggunakan milisaat)
4 const date = new Date(timestamp * 1000);
5
6 // Pilihan 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 // Tukar kepada 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# Penukaran timestamp Python
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Tukar timestamp Unix kepada objek datetime
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # Format string
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// Penukaran timestamp 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 // Tukar dan format tarikh
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// Penukaran timestamp 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 // Tukar timestamp Unix kepada Instant, kemudian kepada LocalDateTime
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // Buat formatter berdasarkan format yang dikehendaki
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 tarikh
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// Penukaran timestamp C#
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Tukar timestamp Unix kepada DateTime
9 // Timestamp Unix adalah saat sejak 1970-01-01
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // Format string berdasarkan pilihan 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 tarikh 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# Penukaran timestamp Ruby
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Tukar timestamp Unix kepada objek Time
6 time = Time.at(timestamp)
7
8 # Format berdasarkan pilihan 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// Penukaran timestamp Go
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Tukar timestamp Unix kepada Time
11 t := time.Unix(timestamp, 0)
12
13 // Format string berdasarkan pilihan 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// Penukaran timestamp Swift
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Buat Date dari timestamp Unix
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // Buat DateFormatter
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // Tetapkan gaya masa berdasarkan pilihan 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 tarikh 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# Penukaran timestamp R
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Tukar timestamp Unix kepada datetime POSIXct
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # Format berdasarkan pilihan 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 tarikh 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% Penukaran timestamp MATLAB
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Tukar timestamp Unix kepada datetime MATLAB
4 % Tarikh Excel adalah hari sejak 1900-01-01, dengan 1 = 1900-01-01
5 % Timestamp Unix adalah saat sejak 1970-01-01
6
7 % Pertama tukar kepada format tarikh Excel
8 % 25569 adalah bilangan hari antara 1900-01-01 dan 1970-01-01
9 excelDate = (timestamp / 86400) + 25569;
10
11 % Format berdasarkan pilihan 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' Penukaran timestamp Excel VBA
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Tukar timestamp Unix kepada tarikh/massa Excel
4 ' Tarikh Excel adalah hari sejak 1900-01-01, dengan 1 = 1900-01-01
5 ' Timestamp Unix adalah saat sejak 1970-01-01
6
7 ' Pertama tukar kepada format tarikh Excel
8 ' 25569 adalah bilangan hari antara 1900-01-01 dan 1970-01-01
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' Format tarikh berdasarkan pilihan 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 dalam lembaran kerja:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' Format 12-jam
22' =ConvertUnixTimestamp(1609459200, FALSE) ' Format 24-jam
23
Mengendalikan Kes Khas
Apabila bekerja dengan timestamp Unix, adalah penting untuk mengendalikan kes khas dengan betul. Berikut adalah contoh mengendalikan beberapa kes khas yang biasa:
1// Pengendalian kes khas JavaScript
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Semak jika timestamp sah
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "Timestamp tidak sah";
6 }
7
8 // Semak untuk timestamp negatif (tarikh sebelum 1970)
9 if (timestamp < 0) {
10 // Beberapa pelayar mungkin tidak mengendalikan timestamp negatif dengan betul
11 // Gunakan pendekatan yang lebih kukuh untuk tarikh sebelum 1970
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "Tarikh tidak sah (sebelum 1970)";
15 }
16 }
17
18 // Semak untuk masalah Y2K38 (untuk sistem 32-bit)
19 const maxInt32 = 2147483647; // Nilai maksimum untuk integer bertanda 32-bit
20 if (timestamp > maxInt32) {
21 // Pertimbangkan untuk menggunakan BigInt untuk timestamp yang sangat besar dalam JavaScript moden
22 console.warn("Timestamp melebihi had integer 32-bit (masalah Y2K38)");
23 }
24
25 // Teruskan dengan penukaran biasa
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 "Ralat menukar timestamp: " + error.message;
41 }
42}
43
Rujukan
-
"Masa 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. "Kompleksiti Masa Kalendar." 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: Tarikh dan Masa di Internet: Timestamp." Kumpulan Kejuruteraan Internet (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., dan Dennis M. Ritchie. "Bahasa Pengaturcaraan C." Prentice Hall, 1988.
Maklum Balas
Klik toast maklum balas untuk mula memberi maklum balas tentang alat ini
Alat Berkaitan
Temui lebih banyak alat yang mungkin berguna untuk aliran kerja anda