Whiz Tools

مبدل زمان یونیکس

Unix времевият печат е броят на секундите от 1 януари 1970 г. (UTC)

تاریخ و زمان تبدیل شده

مبدل زمان یونیکس

مقدمه

زمان یونیکس (که به عنوان زمان POSIX یا زمان Epoch نیز شناخته می‌شود) سیستمی برای توصیف یک نقطه در زمان است. این زمان تعداد ثانیه‌هایی است که از ۱ ژانویه ۱۹۷۰ (نیمه شب UTC/GMT) گذشته است و ثانیه‌های کبیسه را در نظر نمی‌گیرد. زمان‌های یونیکس به طور گسترده‌ای در سیستم‌های کامپیوتری و زبان‌های برنامه‌نویسی استفاده می‌شوند زیرا نمایشی فشرده و مستقل از زبان از یک لحظه خاص در زمان را فراهم می‌کنند.

این مبدل به شما امکان می‌دهد تا زمان یونیکس را به فرمت تاریخ و زمان قابل خواندن برای انسان تبدیل کنید. این مبدل از هر دو فرمت زمان ۱۲ ساعته (AM/PM) و ۲۴ ساعته پشتیبانی می‌کند تا نیازهای منطقه‌ای و شخصی مختلف را برآورده کند.

نحوه کار زمان‌های یونیکس

زمان‌های یونیکس به عنوان تعداد ثانیه‌ها از زمان Epoch یونیکس (۱ ژانویه ۱۹۷۰، ۰۰:۰۰:۰۰ UTC) محاسبه می‌شوند. این امر آن‌ها را برای محاسبه تفاوت‌های زمانی و ذخیره تاریخ‌ها در یک فرمت فشرده، به ویژه مفید می‌سازد.

فرمول ریاضی تبدیل از زمان یونیکس به تاریخ تقویمی شامل چند مرحله است:

۱. با Epoch یونیکس (۱ ژانویه ۱۹۷۰، ۰۰:۰۰:۰۰ UTC) شروع کنید ۲. تعداد ثانیه‌های موجود در زمان را اضافه کنید ۳. سال‌های کبیسه، طول‌های متغیر ماه‌ها و دیگر پیچیدگی‌های تقویمی را در نظر بگیرید ۴. در صورت نیاز، تنظیمات منطقه زمانی را اعمال کنید

به عنوان مثال، زمان یونیکس ۱۶۰۹۴۵۹۲۰۰ نمایانگر جمعه، ۱ ژانویه ۲۰۲۱، ۰۰:۰۰:۰۰ UTC است.

فرمول تبدیل را می‌توان به صورت زیر بیان کرد:

تاریخ=Epoch یونیکس+زمان (به ثانیه)\text{تاریخ} = \text{Epoch یونیکس} + \text{زمان (به ثانیه)}

بیشتر زبان‌های برنامه‌نویسی و سیستم‌های عامل توابع داخلی برای مدیریت این تبدیل ارائه می‌دهند و محاسبات پیچیده تقویمی را پنهان می‌کنند.

گزینه‌های فرمت زمان

این مبدل دو گزینه فرمت زمان را ارائه می‌دهد:

۱. فرمت ۲۴ ساعته (که گاهی اوقات "زمان نظامی" نامیده می‌شود): ساعت‌ها از ۰ تا ۲۳ متغیر است و هیچ نشانه AM/PM وجود ندارد. به عنوان مثال، ۳:۰۰ بعد از ظهر به صورت ۱۵:۰۰ نمایش داده می‌شود.

۲. فرمت ۱۲ ساعته: ساعت‌ها از ۱ تا ۱۲ متغیر است، با AM (ante meridiem) برای زمان‌های از نیمه شب تا ظهر و PM (post meridiem) برای زمان‌های از ظهر تا نیمه شب. به عنوان مثال، ۱۵:۰۰ در فرمت ۲۴ ساعته به صورت ۳:۰۰ بعد از ظهر نمایش داده می‌شود.

انتخاب بین این فرمت‌ها به طور عمده به کنوانسیون‌های منطقه‌ای و ترجیحات شخصی بستگی دارد:

  • فرمت ۲۴ ساعته به طور معمول در بیشتر اروپا، آمریکای لاتین و آسیا، و همچنین در زمینه‌های علمی، نظامی و پزشکی در سراسر جهان استفاده می‌شود.
  • فرمت ۱۲ ساعته در ایالات متحده، کانادا، استرالیا و برخی دیگر از کشورهای انگلیسی زبان برای استفاده روزمره رایج است.

موارد حاشیه‌ای و محدودیت‌ها

هنگام کار با زمان‌های یونیکس، مهم است که از چندین مورد حاشیه‌ای و محدودیت‌ها آگاه باشید:

۱. زمان‌های منفی: این‌ها تاریخ‌هایی را قبل از Epoch یونیکس (۱ ژانویه ۱۹۷۰) نمایان می‌کنند. در حالی که از نظر ریاضی معتبر هستند، برخی سیستم‌ها ممکن است زمان‌های منفی را به درستی مدیریت نکنند.

۲. مشکل سال ۲۰۳۸: زمان‌های یونیکس معمولاً به عنوان اعداد صحیح ۳۲ بیتی ذخیره می‌شوند که در ۱۹ ژانویه ۲۰۳۸ سرریز خواهد شد. پس از این تاریخ، سیستم‌های ۳۲ بیتی قادر به نمایندگی صحیح زمان‌ها نخواهند بود مگر اینکه به نوع عدد صحیح بزرگتری تغییر یابند.

۳. زمان‌های بسیار بزرگ: تاریخ‌های بسیار دور در آینده ممکن است در برخی سیستم‌ها قابل نمایندگی نباشند یا به طور نامنظم مدیریت شوند.

۴. ثانیه‌های کبیسه: زمان یونیکس ثانیه‌های کبیسه را در نظر نمی‌گیرد، که به طور گاه‌به‌گاه به UTC اضافه می‌شوند تا از چرخش نامنظم زمین جبران کند. این بدان معناست که زمان یونیکس به طور دقیق با زمان نجومی هم‌زمان نیست.

۵. ملاحظات منطقه زمانی: زمان‌های یونیکس لحظاتی را در UTC نمایان می‌کنند. تبدیل به زمان محلی نیاز به اطلاعات منطقه زمانی اضافی دارد.

۶. صرفه‌جویی در نور روز: هنگام تبدیل زمان‌ها به زمان محلی، باید پیچیدگی‌های انتقال‌های صرفه‌جویی در نور روز را در نظر گرفت.

موارد استفاده

زمان‌های یونیکس در برنامه‌های متعددی در سراسر محاسبات و مدیریت داده‌ها استفاده می‌شوند:

۱. سوابق پایگاه داده: زمان‌ها معمولاً برای ثبت زمان ایجاد یا ویرایش ورودی‌ها استفاده می‌شوند.

۲. توسعه وب: هدرهای HTTP، کوکی‌ها و مکانیزم‌های کش معمولاً از زمان‌های یونیکس استفاده می‌کنند.

۳. فایل‌های گزارش: گزارش‌های سیستم معمولاً رویدادها را با زمان‌های یونیکس ثبت می‌کنند تا ترتیب زمانی دقیقی داشته باشند.

۴. سیستم‌های کنترل نسخه: Git و دیگر سیستم‌های VCS از زمان‌ها برای ثبت زمانی که کامیت‌ها انجام شده‌اند، استفاده می‌کنند.

۵. پاسخ‌های API: بسیاری از APIهای وب شامل زمان‌ها در پاسخ‌های خود برای نشان دادن زمانی که داده‌ها تولید شده‌اند یا منابع آخرین بار تغییر یافته‌اند، می‌باشند.

۶. سیستم‌های فایل: زمان‌های ایجاد و ویرایش فایل معمولاً به عنوان زمان‌های یونیکس ذخیره می‌شوند.

۷. مدیریت جلسه: برنامه‌های وب از زمان‌ها برای تعیین اینکه چه زمانی باید جلسات کاربر منقضی شوند، استفاده می‌کنند.

۸. تحلیل داده: زمان‌ها یک روش استاندارد برای کار با داده‌های زمانی در برنامه‌های تحلیلی فراهم می‌کنند.

جایگزین‌ها

در حالی که زمان‌های یونیکس به طور گسترده‌ای استفاده می‌شوند، فرمت‌های نمایشی زمان جایگزین دیگری وجود دارد که ممکن است در برخی زمینه‌ها مناسب‌تر باشد:

۱. ISO 8601: یک فرمت رشته‌ای استاندارد (به عنوان مثال، "۲۰۲۱-۰۱-۰۱T۰۰:۰۰:۰۰Z") که قابل خواندن برای انسان است و در عین حال قابلیت مرتب‌سازی را حفظ می‌کند. این فرمت معمولاً برای تبادل داده و برنامه‌های کاربر پسند ترجیح داده می‌شود.

۲. RFC 3339: یک پروفایل از ISO 8601 که در پروتکل‌های اینترنتی استفاده می‌شود و الزامات فرمت‌گذاری سخت‌تری دارد.

۳. فرمت‌های قابل خواندن برای انسان: رشته‌های تاریخ محلی (به عنوان مثال، "۱ ژانویه ۲۰۲۱") برای تعامل مستقیم با کاربر مناسب‌تر هستند اما برای محاسبات کمتر مناسب‌اند.

۴. FILETIME مایکروسافت: یک مقدار ۶۴ بیتی که تعداد دوره‌های ۱۰۰ نانوثانیه‌ای از ۱ ژانویه ۱۶۰۱ را نمایان می‌کند و در سیستم‌های ویندوز استفاده می‌شود.

۵. عدد روز جولین: در نجوم و برخی برنامه‌های علمی استفاده می‌شود و روزها را از ۱ ژانویه ۴۷۱۳ قبل از میلاد شمارش می‌کند.

انتخاب فرمت زمان بستگی به عواملی مانند:

  • دقت مورد نیاز
  • نیازهای قابل خواندن برای انسان
  • محدودیت‌های ذخیره‌سازی
  • سازگاری با سیستم‌های موجود
  • دامنه تاریخ‌هایی که باید نمایان شوند

تاریخچه

مفهوم زمان یونیکس با توسعه سیستم عامل یونیکس در آزمایشگاه‌های بل در اواخر دهه ۱۹۶۰ و اوایل دهه ۱۹۷۰ به وجود آمد. تصمیم به استفاده از ۱ ژانویه ۱۹۷۰ به عنوان Epoch تا حدی دلخواه بود اما برای آن زمان عملی بود - این تاریخ به اندازه کافی نزدیک بود تا نیاز به ذخیره‌سازی تاریخ‌های مورد علاقه را کاهش دهد اما به اندازه کافی دور بود تا برای داده‌های تاریخی مفید باشد.

پیاده‌سازی اولیه از یک عدد صحیح ۳۲ بیتی برای ذخیره تعداد ثانیه‌ها استفاده می‌کرد که برای عمر مورد انتظار سیستم‌های یونیکس در آن زمان کافی بود. با این حال، این تصمیم منجر به مشکل سال ۲۰۳۸ (که گاهی اوقات به آن "Y2K38" یا "بگ یونیکس هزاره" می‌گویند) شد، زیرا اعداد صحیح ۳۲ بیتی تنها می‌توانند تاریخ‌ها را تا ۱۹ ژانویه ۲۰۳۸ نمایان کنند (۰۳:۱۴:۰۷ UTC).

با محبوبیت یافتن یونیکس و سیستم‌های مشابه یونیکس، زمان یونیکس به یک استاندارد غیررسمی برای نمایندگی زمان در محاسبات تبدیل شد. این استاندارد توسط زبان‌های برنامه‌نویسی، پایگاه‌های داده و برنامه‌های متعددی پذیرفته شد و فراتر از محیط اصلی یونیکس گسترش یافت.

سیستم‌های مدرن به طور فزاینده‌ای از اعداد صحیح ۶۴ بیتی برای زمان‌ها استفاده می‌کنند که دامنه قابل نمایندگی را به حدود ۲۹۲ میلیارد سال در هر دو جهت از Epoch گسترش می‌دهد و به طور مؤثری مشکل سال ۲۰۳۸ را حل می‌کند. با این حال، سیستم‌ها و برنامه‌های قدیمی ممکن است هنوز در معرض خطر باشند.

سادگی و کارایی زمان یونیکس باعث شده است که این مفهوم همچنان مرتبط بماند، با وجود توسعه فرمت‌های نمایشی زمان پیچیده‌تر. این مفهوم همچنان یک مفهوم اساسی در محاسبات است که زیرساخت دیجیتال ما را تشکیل می‌دهد.

مثال‌های کد

در اینجا مثال‌هایی از نحوه تبدیل زمان‌های یونیکس به تاریخ‌های قابل خواندن برای انسان در زبان‌های مختلف برنامه‌نویسی آورده شده است:

// تبدیل زمان در جاوااسکریپت
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // ایجاد یک شیء تاریخ جدید (جاوااسکریپت از میلی‌ثانیه‌ها استفاده می‌کند)
  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; // ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
console.log(convertUnixTimestamp(timestamp, false)); // فرمت ۲۴ ساعته
console.log(convertUnixTimestamp(timestamp, true));  // فرمت ۱۲ ساعته
# تبدیل زمان در پایتون
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"  # فرمت ۱۲ ساعته با AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # فرمت ۲۴ ساعته
    
    return date.strftime(format_string)

# مثال استفاده
timestamp = 1609459200  # ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
print(convert_unix_timestamp(timestamp, False))  # فرمت ۲۴ ساعته
print(convert_unix_timestamp(timestamp, True))   # فرمت ۱۲ ساعته
<?php
// تبدیل زمان در PHP
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // فرمت رشته
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // فرمت ۱۲ ساعته با AM/PM
        : 'l, F j, Y H:i:s';   // فرمت ۲۴ ساعته
    
    // تبدیل و فرمت تاریخ
    return date($formatString, $timestamp);
}

// مثال استفاده
$timestamp = 1609459200; // ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // فرمت ۲۴ ساعته
echo convertUnixTimestamp($timestamp, true) . "\n";  // فرمت ۱۲ ساعته
?>
// تبدیل زمان در جاوا
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; // ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // فرمت ۲۴ ساعته
        System.out.println(convertUnixTimestamp(timestamp, true));  // فرمت ۱۲ ساعته
    }
}
// تبدیل زمان در C#
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // تبدیل زمان یونیکس به DateTime
        // زمان یونیکس ثانیه‌ها از ۱۹۷۰-۰۱-۰۱ است
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // فرمت رشته بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // فرمت ۱۲ ساعته با AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // فرمت ۲۴ ساعته
        
        // بازگشت رشته تاریخ فرمت شده
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // فرمت ۲۴ ساعته
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // فرمت ۱۲ ساعته
    }
}
# تبدیل زمان در روبی
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # تبدیل زمان یونیکس به شیء Time
  time = Time.at(timestamp)
  
  # فرمت بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # فرمت ۱۲ ساعته با AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # فرمت ۲۴ ساعته
  end
end

# مثال استفاده
timestamp = 1609459200  # ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
puts convert_unix_timestamp(timestamp, false)  # فرمت ۲۴ ساعته
puts convert_unix_timestamp(timestamp, true)   # فرمت ۱۲ ساعته
// تبدیل زمان در گو
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // تبدیل زمان یونیکس به زمان
    t := time.Unix(timestamp, 0)
    
    // فرمت رشته بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // فرمت ۱۲ ساعته با AM/PM
    } else {
        formatString += "15:04:05"    // فرمت ۲۴ ساعته
    }
    
    // بازگشت زمان فرمت شده
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // فرمت ۲۴ ساعته
    fmt.Println(convertUnixTimestamp(timestamp, true))  // فرمت ۱۲ ساعته
}
// تبدیل زمان در سوئیفت
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // ایجاد تاریخ از زمان یونیکس
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // ایجاد DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // تنظیم سبک زمان بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
    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 // ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // فرمت ۲۴ ساعته
print(convertUnixTimestamp(timestamp, use12Hour: true))  // فرمت ۱۲ ساعته
# تبدیل زمان در R
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # تبدیل زمان یونیکس به datetime POSIXct
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # فرمت بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # فرمت ۱۲ ساعته با AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # فرمت ۲۴ ساعته
  }
  
  # بازگشت رشته تاریخ فرمت شده
  format(date_time, format_string)
}

# مثال استفاده
timestamp <- 1609459200  # ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # فرمت ۲۴ ساعته
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # فرمت ۱۲ ساعته
% تبدیل زمان در MATLAB
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % تبدیل زمان یونیکس به datetime MATLAB
    % تاریخ‌های MATLAB روزهایی از ۱۹۰۰-۰۱-۰۱ هستند، با ۱ = ۱۹۰۰-۰۱-۰۱
    % زمان‌های یونیکس ثانیه‌هایی از ۱۹۷۰-۰۱-۰۱ هستند
    
    % ابتدا تبدیل به فرمت تاریخ MATLAB
    % ۲۵۵۶۹ تعداد روزها بین ۱۹۰۰-۰۱-۰۱ و ۱۹۷۰-۰۱-۰۱ است
    excelDate = (timestamp / 86400) + 25569;
    
    % فرمت تاریخ بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
    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;  % ۱ ژانویه ۲۰۲۱ ۰۰:۰۰:۰۰ UTC
disp(convertUnixTimestamp(timestamp, false))  % فرمت ۲۴ ساعته
disp(convertUnixTimestamp(timestamp, true))   % فرمت ۱۲ ساعته
' تبدیل زمان در VBA اکسل
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' تبدیل زمان یونیکس به تاریخ/زمان اکسل
    ' تاریخ‌های اکسل روزهایی از ۱۹۰۰-۰۱-۰۱ هستند، با ۱ = ۱۹۰۰-۰۱-۰۱
    ' زمان‌های یونیکس ثانیه‌هایی از ۱۹۷۰-۰۱-۰۱ هستند
    
    ' ابتدا تبدیل به فرمت تاریخ اکسل
    ' ۲۵۵۶۹ تعداد روزها بین ۱۹۰۰-۰۱-۰۱ و ۱۹۷۰-۰۱-۰۱ است
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' فرمت تاریخ بر اساس ترجیح ۱۲ ساعته یا ۲۴ ساعته
    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)  ' فرمت ۱۲ ساعته
' =ConvertUnixTimestamp(1609459200, FALSE) ' فرمت ۲۴ ساعته

مدیریت موارد حاشیه‌ای

هنگام کار با زمان‌های یونیکس، مهم است که موارد حاشیه‌ای را به درستی مدیریت کنید. در اینجا مثال‌هایی از مدیریت برخی موارد حاشیه‌ای رایج آورده شده است:

// مدیریت موارد حاشیه‌ای در جاوااسکریپت
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // بررسی اینکه آیا زمان معتبر است
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "زمان نامعتبر";
  }
  
  // بررسی زمان‌های منفی (تاریخ‌های قبل از ۱۹۷۰)
  if (timestamp < 0) {
    // برخی مرورگرها ممکن است زمان‌های منفی را به درستی مدیریت نکنند
    // از رویکردی قوی‌تر برای تاریخ‌های قبل از ۱۹۷۰ استفاده کنید
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "تاریخ نامعتبر (قبل از ۱۹۷۰)";
    }
  }
  
  // بررسی مشکل Y2K38 (برای سیستم‌های ۳۲ بیتی)
  const maxInt32 = 2147483647; // حداکثر مقدار برای عدد صحیح ۳۲ بیتی
  if (timestamp > maxInt32) {
    // در نظر بگیرید که برای زمان‌های بسیار بزرگ از BigInt در جاوااسکریپت مدرن استفاده کنید
    console.warn("زمان از حد مجاز عدد صحیح ۳۲ بیتی فراتر می‌رود (مشکل 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;
  }
}

منابع

۱. "زمان یونیکس." ویکی‌پدیا، بنیاد ویکی‌مدیا، https://en.wikipedia.org/wiki/Unix_time

۲. "مشکل سال ۲۰۳۸." ویکی‌پدیا، بنیاد ویکی‌مدیا، https://en.wikipedia.org/wiki/Year_2038_problem

۳. اولسون، آرتور دیوید. "پیچیدگی‌های زمان تقویمی." گروه باز، https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf

۴. "ISO 8601." ویکی‌پدیا، بنیاد ویکی‌مدیا، https://en.wikipedia.org/wiki/ISO_8601

۵. "RFC 3339: تاریخ و زمان در اینترنت: زمان‌ها." گروه مهندسی اینترنت (IETF)، https://tools.ietf.org/html/rfc3339

۶. کرنیگان، برایان و ریچی، دنیس م. "زبان برنامه‌نویسی C." انتشارات پرنتیس هال، ۱۹۸۸.

Feedback