Whiz Tools

ตัวแปลง Unix Timestamp

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

วันที่และเวลาที่แปลงแล้ว

ยูนิกซ์ ไทม์สแตมป์ คอนเวอร์เตอร์

บทนำ

ยูนิกซ์ไทมป์สแตมป์ (Unix timestamp) (หรือที่เรียกว่า POSIX time หรือ Epoch time) เป็นระบบสำหรับการอธิบายจุดในเวลา มันคือจำนวนวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970 (เที่ยงคืน UTC/GMT) โดยไม่คำนึงถึงวินาทีที่มีการเพิ่ม (leap seconds) ยูนิกซ์ไทมป์สแตมป์ถูกใช้กันอย่างแพร่หลายในระบบคอมพิวเตอร์และภาษาการเขียนโปรแกรมเนื่องจากมันให้การแทนที่เฉพาะจุดในเวลาในรูปแบบที่กระชับและไม่ขึ้นกับภาษา

ตัวแปลงนี้ช่วยให้คุณสามารถแปลงยูนิกซ์ไทมป์สแตมป์ให้เป็นวันที่และเวลาที่อ่านได้ในรูปแบบที่เข้าใจง่าย มันรองรับทั้งรูปแบบเวลา 12 ชั่วโมง (AM/PM) และ 24 ชั่วโมงเพื่อรองรับความชอบในระดับภูมิภาคและส่วนบุคคลที่แตกต่างกัน

วิธีการทำงานของยูนิกซ์ไทมป์สแตมป์

ยูนิกซ์ไทมป์สแตมป์ถูกคำนวณเป็นจำนวนวินาทีตั้งแต่ยูนิกซ์อีพอช (Unix Epoch) (วันที่ 1 มกราคม 1970, 00:00:00 UTC) ซึ่งทำให้มันมีประโยชน์โดยเฉพาะสำหรับการคำนวณความแตกต่างของเวลาและสำหรับการจัดเก็บวันที่ในรูปแบบที่กระชับ

สูตรการแปลงจากยูนิกซ์ไทมป์สแตมป์ไปยังวันที่ในปฏิทินประกอบด้วยหลายขั้นตอน:

  1. เริ่มต้นด้วยยูนิกซ์อีพอช (วันที่ 1 มกราคม 1970, 00:00:00 UTC)
  2. เพิ่มจำนวนวินาทีในไทป์สแตมป์
  3. คำนึงถึงปีอธิก (leap years), ความยาวเดือนที่แตกต่างกัน, และความซับซ้อนอื่น ๆ ของปฏิทิน
  4. ใช้การปรับเวลาเขตถ้าจำเป็น

ตัวอย่างเช่น ยูนิกซ์ไทมป์สแตมป์ 1609459200 แทนวันศุกร์ที่ 1 มกราคม 2021, 00:00:00 UTC

สูตรการแปลงสามารถแสดงได้ดังนี้:

วันที่=ยูนิกซ์อีพอช+ไทป์สแตมป์ (ในวินาที)\text{วันที่} = \text{ยูนิกซ์อีพอช} + \text{ไทป์สแตมป์ (ในวินาที)}

ภาษาการเขียนโปรแกรมและระบบปฏิบัติการส่วนใหญ่มีฟังก์ชันในตัวเพื่อจัดการการแปลงนี้ โดยทำให้การคำนวณปฏิทินที่ซับซ้อนกลายเป็นเรื่องง่าย

ตัวเลือกฟอร์แมตเวลา

ตัวแปลงนี้มีตัวเลือกฟอร์แมตเวลาสองแบบ:

  1. ฟอร์แมต 24 ชั่วโมง (บางครั้งเรียกว่า "เวลาแบบทหาร"): ชั่วโมงจะอยู่ในช่วง 0 ถึง 23 และไม่มีการระบุ AM/PM ตัวอย่างเช่น 15:00 แทนเวลา 3:00 PM

  2. ฟอร์แมต 12 ชั่วโมง: ชั่วโมงจะอยู่ในช่วง 1 ถึง 12 โดยมี AM (ante meridiem) สำหรับเวลาตั้งแต่เที่ยงคืนถึงเที่ยงวัน และ PM (post meridiem) สำหรับเวลาตั้งแต่เที่ยงวันถึงเที่ยงคืน ตัวอย่างเช่น 15:00 ในฟอร์แมต 24 ชั่วโมงจะแทนที่เวลา 3:00 PM

การเลือกระหว่างฟอร์แมตเหล่านี้ส่วนใหญ่เป็นเรื่องของธรรมเนียมในระดับภูมิภาคและความชอบส่วนบุคคล:

  • ฟอร์แมต 24 ชั่วโมงใช้กันทั่วไปในยุโรป, ละตินอเมริกา, และเอเชีย รวมถึงในบริบททางวิทยาศาสตร์, ทหาร, และการแพทย์ทั่วโลก
  • ฟอร์แมต 12 ชั่วโมงเป็นที่นิยมในสหรัฐอเมริกา, แคนาดา, ออสเตรเลีย, และบางประเทศที่พูดภาษาอังกฤษสำหรับการใช้งานในชีวิตประจำวัน

ข้อพิจารณาและข้อจำกัด

เมื่อทำงานกับยูนิกซ์ไทมป์สแตมป์ สิ่งสำคัญคือต้องตระหนักถึงหลายกรณีขอบเขตและข้อจำกัด:

  1. ไทป์สแตมป์เชิงลบ: แทนวันที่ก่อนยูนิกซ์อีพอช (วันที่ 1 มกราคม 1970) แม้ว่าจะถูกต้องทางคณิตศาสตร์ แต่บางระบบอาจไม่จัดการไทป์สแตมป์เชิงลบอย่างถูกต้อง

  2. ปัญหาปี 2038: ยูนิกซ์ไทมป์สแตมป์มักถูกจัดเก็บเป็นจำนวนเต็ม 32 บิตที่มีเครื่องหมาย ซึ่งจะเกินขีดจำกัดในวันที่ 19 มกราคม 2038 หลังจากจุดนี้ ระบบ 32 บิตจะไม่สามารถแทนเวลาที่ถูกต้องได้ เว้นแต่จะมีการปรับปรุงเพื่อใช้ประเภทจำนวนเต็มที่ใหญ่กว่า

  3. ไทป์สแตมป์ที่มีขนาดใหญ่มาก: วันที่ในอนาคตที่ไกลมากอาจไม่สามารถแทนได้ในบางระบบ หรืออาจถูกจัดการอย่างไม่สอดคล้องกัน

  4. วินาทีอธิก: ยูนิกซ์เวลาไม่คำนึงถึงวินาทีอธิก ซึ่งถูกเพิ่มเข้ามาใน UTC เพื่อชดเชยการหมุนที่ไม่สม่ำเสมอของโลก ซึ่งหมายความว่ายูนิกซ์เวลาไม่ถูกซิงโครไนซ์อย่างแม่นยำกับเวลาเชิงดาราศาสตร์

  5. การพิจารณาเขตเวลา: ยูนิกซ์ไทมป์สแตมป์แทนช่วงเวลาใน UTC การแปลงเป็นเวลาท้องถิ่นต้องการข้อมูลเขตเวลาเพิ่มเติม

  6. เวลาออมแสง: เมื่อแปลงไทป์สแตมป์เป็นเวลาท้องถิ่น ความซับซ้อนของการเปลี่ยนแปลงเวลาออมแสงต้องถูกพิจารณา

กรณีการใช้งาน

ยูนิกซ์ไทมป์สแตมป์ถูกใช้ในหลายแอปพลิเคชันทั่วทั้งการประมวลผลและการจัดการข้อมูล:

  1. บันทึกในฐานข้อมูล: ไทป์สแตมป์มักถูกใช้เพื่อบันทึกเมื่อมีการสร้างหรือแก้ไขรายการ

  2. การพัฒนาเว็บ: HTTP headers, cookies, และกลไกการแคชมักใช้ยูนิกซ์ไทมป์สแตมป์

  3. ไฟล์บันทึก: บันทึกระบบมักบันทึกเหตุการณ์ด้วยยูนิกซ์ไทมป์สแตมป์เพื่อให้การจัดลำดับเวลาอย่างแม่นยำ

  4. ระบบควบคุมเวอร์ชัน: Git และระบบ VCS อื่น ๆ ใช้ไทป์สแตมป์เพื่อบันทึกเมื่อมีการทำ commit

  5. การตอบสนอง API: API เว็บหลายแห่งรวมไทป์สแตมป์ในคำตอบของพวกเขาเพื่อบ่งชี้ว่าเมื่อใดที่ข้อมูลถูกสร้างขึ้นหรือเมื่อทรัพยากรถูกแก้ไขล่าสุด

  6. ระบบไฟล์: เวลาในการสร้างและแก้ไขไฟล์มักถูกจัดเก็บเป็นยูนิกซ์ไทมป์สแตมป์

  7. การจัดการเซสชัน: แอปพลิเคชันเว็บใช้ไทป์สแตมป์เพื่อตัดสินใจว่าเมื่อใดที่เซสชันของผู้ใช้ควรหมดอายุ

  8. การวิเคราะห์ข้อมูล: ไทป์สแตมป์ให้วิธีการมาตรฐานในการทำงานกับข้อมูลเชิงเวลาในแอปพลิเคชันการวิเคราะห์

ทางเลือก

แม้ว่ายูนิกซ์ไทมป์สแตมป์จะถูกใช้กันอย่างแพร่หลาย แต่ก็มีรูปแบบการแทนที่เวลาอื่น ๆ ที่อาจเหมาะสมกว่าในบางบริบท:

  1. ISO 8601: รูปแบบสตริงมาตรฐาน (เช่น "2021-01-01T00:00:00Z") ที่อ่านได้ง่ายในขณะที่ยังคงสามารถเรียงลำดับได้ มักจะถูกเลือกใช้สำหรับการแลกเปลี่ยนข้อมูลและแอปพลิเคชันที่มีการแสดงผลต่อผู้ใช้

  2. RFC 3339: โปรไฟล์ของ ISO 8601 ที่ใช้ในโปรโตคอลอินเทอร์เน็ต โดยมีข้อกำหนดการจัดรูปแบบที่เข้มงวดกว่า

  3. รูปแบบที่อ่านได้ง่าย: สตริงวันที่ที่มีการระบุในท้องถิ่น (เช่น "1 มกราคม 2021") เหมาะสำหรับการโต้ตอบกับผู้ใช้โดยตรง แต่ไม่เหมาะสำหรับการคำนวณ

  4. Microsoft FILETIME: ค่าที่มีขนาด 64 บิตที่แทนจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 1 มกราคม 1601 ใช้ในระบบ Windows

  5. หมายเลขวันจูเลียน: ใช้ในดาราศาสตร์และแอปพลิเคชันทางวิทยาศาสตร์บางอย่าง โดยนับวันตั้งแต่วันที่ 1 มกราคม 4713 ก่อนคริสต์ศักราช

การเลือกใช้รูปแบบเวลา ขึ้นอยู่กับปัจจัยต่าง ๆ เช่น:

  • ความแม่นยำที่ต้องการ
  • ความต้องการในการอ่านของมนุษย์
  • ข้อจำกัดในการจัดเก็บ
  • ความเข้ากันได้กับระบบที่มีอยู่
  • ช่วงวันที่ที่ต้องการแทนที่

ประวัติศาสตร์

แนวคิดของเวลาแบบยูนิกซ์เกิดขึ้นจากการพัฒนาระบบปฏิบัติการยูนิกซ์ที่ Bell Labs ในช่วงปลายทศวรรษ 1960 และต้นทศวรรษ 1970 การตัดสินใจใช้วันที่ 1 มกราคม 1970 เป็นอีพอชนั้นค่อนข้างจะเป็นการเลือกที่สุ่ม แต่ก็มีความเหมาะสมในขณะนั้น—มันเป็นวันที่ใกล้เคียงพอที่จะลดความต้องการในการจัดเก็บสำหรับวันที่ที่น่าสนใจ แต่ก็ห่างไกลพอที่จะมีประโยชน์สำหรับข้อมูลทางประวัติศาสตร์

การใช้งานเดิมใช้จำนวนเต็ม 32 บิตที่มีเครื่องหมายเพื่อจัดเก็บจำนวนวินาที ซึ่งเพียงพอสำหรับอายุการใช้งานที่คาดการณ์ไว้ของระบบยูนิกซ์ในขณะนั้น อย่างไรก็ตาม การตัดสินใจนี้นำไปสู่ปัญหาปี 2038 (บางครั้งเรียกว่า "Y2K38" หรือ "Unix Millennium Bug") เนื่องจากจำนวนเต็ม 32 บิตสามารถแทนวันที่ได้สูงสุดจนถึงวันที่ 19 มกราคม 2038 (03:14:07 UTC)

เมื่อยูนิกซ์และระบบที่คล้ายกันได้รับความนิยม ยูนิกซ์ไทมป์สแตมป์จึงกลายเป็นมาตรฐานที่ไม่เป็นทางการในการแทนที่เวลาในคอมพิวเตอร์ มันถูกนำไปใช้โดยภาษาการเขียนโปรแกรม, ฐานข้อมูล, และแอปพลิเคชันจำนวนมาก ซึ่งขยายออกไปไกลกว่าบริบทยูนิกซ์เดิม

ระบบสมัยใหม่เริ่มใช้จำนวนเต็ม 64 บิตสำหรับไทป์สแตมป์ ซึ่งขยายช่วงที่สามารถแทนได้ประมาณ 292 พันล้านปีในทั้งสองทิศทางจากอีพอช ซึ่งแก้ไขปัญหาปี 2038 อย่างมีประสิทธิภาพ อย่างไรก็ตาม ระบบและแอปพลิเคชันที่เก่าแก่ยังคงอาจมีความเสี่ยง

ความเรียบง่ายและความมีประโยชน์ของยูนิกซ์ไทมป์สแตมป์ทำให้มันยังคงมีความเกี่ยวข้องแม้จะมีการพัฒนารูปแบบการแทนที่เวลาที่ซับซ้อนมากขึ้น มันยังคงเป็นแนวคิดพื้นฐานในการประมวลผลคอมพิวเตอร์ ซึ่งเป็นรากฐานของโครงสร้างพื้นฐานดิจิทัลของเรา

ตัวอย่างโค้ด

นี่คือตัวอย่างของการแปลงยูนิกซ์ไทมป์สแตมป์เป็นวันที่ที่อ่านได้ในภาษาการเขียนโปรแกรมต่าง ๆ:

// การแปลงไทป์สแตมป์ใน JavaScript
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // สร้างวัตถุ Date ใหม่ (JavaScript ใช้หน่วยมิลลิวินาที)
  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);
}

// การใช้งานตัวอย่าง
const timestamp = 1609459200; // วันที่ 1 มกราคม 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // ฟอร์แมต 24 ชั่วโมง
console.log(convertUnixTimestamp(timestamp, true));  // ฟอร์แมต 12 ชั่วโมง
# การแปลงไทป์สแตมป์ใน Python
import datetime

def convert_unix_timestamp(timestamp, use_12hour=False):
    # แปลงยูนิกซ์ไทมป์สแตมป์เป็นวัตถุ datetime
    date = datetime.datetime.fromtimestamp(timestamp)
    
    # จัดรูปแบบสตริงวันที่
    if use_12hour:
        format_string = "%A, %B %d, %Y %I:%M:%S %p"  # ฟอร์แมต 12 ชั่วโมงพร้อม AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # ฟอร์แมต 24 ชั่วโมง
    
    return date.strftime(format_string)

# การใช้งานตัวอย่าง
timestamp = 1609459200  # วันที่ 1 มกราคม 2021 00:00:00 UTC
print(convert_unix_timestamp(timestamp, False))  # ฟอร์แมต 24 ชั่วโมง
print(convert_unix_timestamp(timestamp, True))   # ฟอร์แมต 12 ชั่วโมง
<?php
// การแปลงไทป์สแตมป์ใน PHP
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // จัดรูปแบบสตริง
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // ฟอร์แมต 12 ชั่วโมงพร้อม AM/PM
        : 'l, F j, Y H:i:s';   // ฟอร์แมต 24 ชั่วโมง
    
    // แปลงและจัดรูปแบบวันที่
    return date($formatString, $timestamp);
}

// การใช้งานตัวอย่าง
$timestamp = 1609459200; // วันที่ 1 มกราคม 2021 00:00:00 UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // ฟอร์แมต 24 ชั่วโมง
echo convertUnixTimestamp($timestamp, true) . "\n";  // ฟอร์แมต 12 ชั่วโมง
?>
// การแปลงไทป์สแตมป์ใน 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) {
        // แปลงยูนิกซ์ไทมป์สแตมป์เป็น Instant แล้วไปยัง LocalDateTime
        Instant instant = Instant.ofEpochSecond(timestamp);
        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // สร้างตัวจัดรูปแบบตามฟอร์แมตที่ต้องการ
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
        );
        
        // จัดรูปแบบวันที่
        return dateTime.format(formatter);
    }
    
    public static void main(String[] args) {
        long timestamp = 1609459200; // วันที่ 1 มกราคม 2021 00:00:00 UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // ฟอร์แมต 24 ชั่วโมง
        System.out.println(convertUnixTimestamp(timestamp, true));  // ฟอร์แมต 12 ชั่วโมง
    }
}
// การแปลงไทป์สแตมป์ใน C#
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // แปลงยูนิกซ์ไทมป์สแตมป์เป็น DateTime
        // ยูนิกซ์ไทมป์สแตมป์คือวินาทีตั้งแต่ 1970-01-01
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // จัดรูปแบบสตริงตามความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // ฟอร์แมต 12 ชั่วโมงพร้อม AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // ฟอร์แมต 24 ชั่วโมง
        
        // ส่งคืนสตริงวันที่ที่จัดรูปแบบ
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // วันที่ 1 มกราคม 2021 00:00:00 UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // ฟอร์แมต 24 ชั่วโมง
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // ฟอร์แมต 12 ชั่วโมง
    }
}
# การแปลงไทป์สแตมป์ใน Ruby
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # แปลงยูนิกซ์ไทมป์สแตมป์เป็นวัตถุ Time
  time = Time.at(timestamp)
  
  # จัดรูปแบบตามความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # ฟอร์แมต 12 ชั่วโมงพร้อม AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # ฟอร์แมต 24 ชั่วโมง
  end
end

# การใช้งานตัวอย่าง
timestamp = 1609459200  # วันที่ 1 มกราคม 2021 00:00:00 UTC
puts convert_unix_timestamp(timestamp, false)  # ฟอร์แมต 24 ชั่วโมง
puts convert_unix_timestamp(timestamp, true)   # ฟอร์แมต 12 ชั่วโมง
// การแปลงไทป์สแตมป์ใน Go
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // แปลงยูนิกซ์ไทมป์สแตมป์เป็น Time
    t := time.Unix(timestamp, 0)
    
    // จัดรูปแบบสตริงตามความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // ฟอร์แมต 12 ชั่วโมงพร้อม AM/PM
    } else {
        formatString += "15:04:05"    // ฟอร์แมต 24 ชั่วโมง
    }
    
    // ส่งคืนเวลาที่จัดรูปแบบ
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // วันที่ 1 มกราคม 2021 00:00:00 UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // ฟอร์แมต 24 ชั่วโมง
    fmt.Println(convertUnixTimestamp(timestamp, true))  // ฟอร์แมต 12 ชั่วโมง
}
// การแปลงไทป์สแตมป์ใน Swift
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // สร้าง Date จากยูนิกซ์ไทป์สแตมป์
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // สร้าง DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // ตั้งค่ารูปแบบเวลาโดยขึ้นอยู่กับความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
    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")
    }
    
    // ส่งคืนวันที่ที่จัดรูปแบบ
    return formatter.string(from: date)
}

// การใช้งานตัวอย่าง
let timestamp = 1609459200 // วันที่ 1 มกราคม 2021 00:00:00 UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // ฟอร์แมต 24 ชั่วโมง
print(convertUnixTimestamp(timestamp, use12Hour: true))  // ฟอร์แมต 12 ชั่วโมง
# การแปลงไทป์สแตมป์ใน R
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # แปลงยูนิกซ์ไทป์สแตมป์เป็นวันที่ POSIXct
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # จัดรูปแบบตามความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # ฟอร์แมต 12 ชั่วโมงพร้อม AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # ฟอร์แมต 24 ชั่วโมง
  }
  
  # ส่งคืนสตริงวันที่ที่จัดรูปแบบ
  format(date_time, format_string)
}

# การใช้งานตัวอย่าง
timestamp <- 1609459200  # วันที่ 1 มกราคม 2021 00:00:00 UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # ฟอร์แมต 24 ชั่วโมง
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # ฟอร์แมต 12 ชั่วโมง
% การแปลงไทป์สแตมป์ใน MATLAB
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % แปลงยูนิกซ์ไทป์สแตมป์เป็น datetime ของ MATLAB
    % วันที่ใน MATLAB คือวันที่ตั้งแต่ 1900-01-01 โดย 1 = 1900-01-01
    % ยูนิกซ์ไทป์สแตมป์คือวินาทีตั้งแต่ 1970-01-01
    
    % แปลงเป็นรูปแบบวันที่ของ MATLAB
    % 25569 คือจำนวนวันระหว่าง 1900-01-01 และ 1970-01-01
    excelDate = (timestamp / 86400) + 25569;
    
    % จัดรูปแบบตามความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
    if use12Hour
        formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy h:mm:ss AM/PM');
    else
        formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy hh:mm:ss');
    end
end

% การใช้งานตัวอย่าง
timestamp = 1609459200;  % วันที่ 1 มกราคม 2021 00:00:00 UTC
disp(convertUnixTimestamp(timestamp, false))  % ฟอร์แมต 24 ชั่วโมง
disp(convertUnixTimestamp(timestamp, true))   % ฟอร์แมต 12 ชั่วโมง
' การแปลงไทป์สแตมป์ใน Excel VBA
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' แปลงยูนิกซ์ไทป์สแตมป์เป็นวันที่/เวลาใน Excel
    ' วันที่ใน Excel คือวันตั้งแต่ 1900-01-01 โดย 1 = 1900-01-01
    ' ยูนิกซ์ไทป์สแตมป์คือวินาทีตั้งแต่ 1970-01-01
    
    ' แปลงเป็นรูปแบบวันที่ของ Excel
    ' 25569 คือจำนวนวันระหว่าง 1900-01-01 และ 1970-01-01
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' จัดรูปแบบวันที่ตามความชอบ 12 ชั่วโมงหรือ 24 ชั่วโมง
    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

' การใช้งานในเวิร์กชีต:
' =ConvertUnixTimestamp(1609459200, TRUE)  ' ฟอร์แมต 12 ชั่วโมง
' =ConvertUnixTimestamp(1609459200, FALSE) ' ฟอร์แมต 24 ชั่วโมง

การจัดการกรณีขอบเขต

เมื่อทำงานกับยูนิกซ์ไทมป์สแตมป์ สิ่งสำคัญคือต้องจัดการกรณีขอบเขตอย่างถูกต้อง นี่คือตัวอย่างการจัดการกรณีขอบเขตทั่วไป:

// การจัดการกรณีขอบเขตใน JavaScript
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // ตรวจสอบว่าไทป์สแตมป์ถูกต้องหรือไม่
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "ไทป์สแตมป์ไม่ถูกต้อง";
  }
  
  // ตรวจสอบไทป์สแตมป์เชิงลบ (วันที่ก่อนปี 1970)
  if (timestamp < 0) {
    // บางเบราว์เซอร์อาจไม่จัดการไทป์สแตมป์เชิงลบอย่างถูกต้อง
    // ใช้วิธีที่มีความแข็งแกร่งมากขึ้นสำหรับวันที่ก่อนปี 1970
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "วันที่ไม่ถูกต้อง (ก่อนปี 1970)";
    }
  }
  
  // ตรวจสอบปัญหา Y2K38 (สำหรับระบบ 32 บิต)
  const maxInt32 = 2147483647; // ค่าสูงสุดสำหรับจำนวนเต็ม 32 บิตที่มีเครื่องหมาย
  if (timestamp > maxInt32) {
    // พิจารณาใช้ BigInt สำหรับไทป์สแตมป์ที่มีขนาดใหญ่ใน JavaScript สมัยใหม่
    console.warn("ไทป์สแตมป์เกินขีดจำกัดของจำนวนเต็ม 32 บิต (ปัญหา Y2K38)");
  }
  
  // ดำเนินการแปลงตามปกติ
  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 "เกิดข้อผิดพลาดในการแปลงไทป์สแตมป์: " + error.message;
  }
}

อ้างอิง

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

  2. "Year 2038 Problem." 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., and Dennis M. Ritchie. "The C Programming Language." Prentice Hall, 1988.

Feedback