若要在 Python 日期範圍中產生一個隨機日期,請從 0 到端點之間天數選取一個含首尾的日期偏移量,再將其加到開始日期;Random Date Generator 以相同的行事曆日期方式處理最多 1,000 筆結果。實際任務是在兩個嚴格的 YYYY-MM-DD 邊界之間產生一個或多個乾淨的行事曆日期值,而非僅僅落在某個日期附近的隨機時間。Random Date Generator 在您的瀏覽器中完整處理含首尾的範圍、取樣、重複選項以及僅日期的格式化。請輸入有效的開始與結束日期,從 1 到 1,000 選擇一個整數筆數,並決定是否允許重複。兩個端點與介於其間的每個日期擁有相同的選取機會。一天範圍有效,並會回傳其唯一日期;唯一模式會拒絕大於可用範圍的筆數。輸出為一組穩定的 YYYY-MM-DD 值清單,不含一天中的時間或顯示的時區偏移。沒有任何日期範圍或產生的清單會上傳至 Lizely。請將結果用於測試資料、練習、提示、示範或範例排程。

generate random date in range python
使用 Python 在範圍內產生隨機日期

Python 範圍計算

核心公式分為三個部分:可用日期等於結束索引減去開始索引再加一,偏移量是一個從零到可用數量減一的整數,選定的日期則是開始日期加上那麼多天。這個概念性運算有助於說明 Python 含首尾的選取方式並檢查工具輸出,雖然產生器取樣的是 UTC 行事曆日的序數,而非反覆加上本地時數。

以一個實際例子來看,公式是可用日期等於結束位置減去開始位置再加一。從 2024-02-28 到 2024-03-01,代入二減零加一得到三個可用位置。偏移量為零、一和二,分別對應 2 月 28 日、2 月 29 日和 3 月 1 日。2 月 29 日有效,因為 2024 年是閏年,且兩個端點仍然符合資格。

當需要多個值時,請重複相同的含首尾選取程序。在啟用重複模式時,每次要求的抽取都會獨立從整個範圍取樣,因此預期會出現重複。在停用重複時,範圍內的每個日期都必須符合選取資格,且要求的筆數不能超過可用日期的數量。

為 Python 工作產生日期

開啟 Random Date Generator,並依您的 Python 專案需求設定控制項。

  1. 以嚴格的 YYYY-MM-DD 格式選擇有效的開始日期與結束日期。開始日期不可晚於結束日期,且兩個端點皆符合選取資格。
  2. 輸入從 1 到 1,000 的整數筆數。空白、分數、零、負值或超過 1,000 的值會產生錯誤,且不會截斷要求。
  3. 決定是否允許同一日期出現超過一次。允許重複以進行獨立抽取,或停用以進行不歸還的均勻取樣。
  4. 產生日期並等待清單出現。
  5. 驗證顯示的開始日期、結束日期與結果筆數。複製或記錄 YYYY-MM-DD 值,然後將其貼到您的 Python 檔案、測試資料或資料結構中。

若您編輯任一端點、更改筆數或切換重複模式,先前的清單與任何先前的錯誤都會被清除。這能防止以較早設定產生的結果,在目前的控制項下仍然顯示如同相符。

控制項與含首尾的輸出

這些控制項定義了精確的限制,使產生的結果更容易與 Python 驗證步驟對接。

控制項 驗證值 對結果的影響
輸入格式 嚴格的 YYYY-MM-DD 支援從 0001-01-01 到 9999-12-31 的民用日期。
範圍 開始日期與結束日期 兩個端點與其間每個有效的行事曆日期皆可被選取。
筆數 從 1 到 1,000 的整數 無效值會回報允許的範圍;不會以靜默方式縮短。
重複 允許或停用 允許模式獨立抽取;停用模式以不歸還方式取樣。
唯一上限 筆數不得超過可用日期 過大的要求會回報錯誤,而非回傳較少的值。
輸出 穩定的 YYYY-MM-DD 清單 每個結果都是行事曆日期,沒有時間或時區偏移。
處理方式 完全在瀏覽器中進行 選定的範圍與產生的清單不會上傳至 Lizely。

重複模式為每個要求的結果執行獨立取樣。唯一模式使用稀疏的部分 Fisher-Yates 不歸還選取,因此在每一步中每個符合資格的日期仍保持均勻可選,且記憶體使用量隨著要求的筆數成長,而非隨總範圍成長。

無日光節約時間漂移的行事曆取樣

從本地午夜開始並反覆加上 24 小時來產生日期,在日光節約轉換期間可能會產生 23:00 或 01:00。該方法在時鐘變更附近也可能會跳過或重複某個顯示的日期。Random Date Generator 透過將每個日期視為 UTC 行事曆日序數來避免此問題。在內部,其 UTC 毫秒值會除以正好 86,400,000,以取得相對於 1970-01-01 的整天位置。選定的位置接著使用 UTC 取得器格式化,在不附帶時間或時區偏移的情況下保留行事曆日期。

隨機性來自瀏覽器的 Web Crypto getRandomValues API,它提供無號 32 位元字。該工具不使用 Math.random()。它同時避免了當可用日期數量無法整除隨機字空間時,因套用原始模數所產生的機率偏差問題。拒絕取樣僅接受大小為可用日期數量之確切倍數的最大前導區段,之後以模數縮減將接受的值均勻對映。若被拒絕的值持續出現,則有限的安全防護會回報隨機來源失敗。此方法讓每個符合資格的日期擁有相同數量的底層隨機來源值。

驗證與範圍邊界情況

嚴格的 YYYY-MM-DD 值會透過在 UTC Date 物件上設定年、月、日並讀回各元件來進行驗證。這遵循了 ECMAScript Date 物件規範 所實作的格里高利曆行為。2 月 29 日在 2000 年與 2024 年有效,但在 1900 年與 2023 年則會被拒絕。例如 2025-04-31 這類輸入會被拒絕,而非進位到 5 月 1 日。

從 0001 到 0099 的年份會保留其字面值,因為實作使用 setUTCFullYear,而非與 Date.UTC 相關的舊式兩位數年份解讀。當專案需要支援民用日期範圍前一千年的測試資料時,這點很重要。

開始日期晚於結束日期時無效。一天範圍有效,且永遠會回傳該日期;要從中取得重複的值需要啟用重複模式。在唯一模式下,要求的日期數超過範圍所含數量是一個錯誤,而非切換取樣方法或減少結果筆數的指令。

將產生的日期移入 Python

該工具產生的是 YYYY-MM-DD 字串清單,而非可執行的 Python 程式碼。將值保留為字串能精準保留產生器所驗證並顯示的內容。

  1. 複製產生的清單,並將其指派給 Python 變數,例如 date_strings。
  2. 若測試資料接受 ISO 格式的民用日期,請保留字串;若專案需要 datetime.date 物件,則進行轉換。
  3. 使用 from datetime import date 匯入 date 類別,接著使用 python_dates = [date.fromisoformat(value) for value in date_strings]
  4. 執行您自己的範圍、筆數、排序、重複、週末、假日或其他專案特定需求的檢查。

若要進行可重現的軟體測試,請儲存產生的清單,或使用另一個具種子的測試產生器。Web Crypto 取樣在本介面中刻意不支援設定種子,因此複製一個已接受的執行結果,是保留所產生精確值的直接方式。

選擇合適的資料用途

隨機的行事曆日期適用於軟體測試資料、寫作提示、範例排程、隨機練習與示範。每個結果代表一個民用日期,但並不編碼一天中的時間、時間戳記、時區、歷史曆法轉換或組織專屬的可用性規則。

  • 週末、公共假日與歷史曆法轉換並不會自動排除。
  • 工作日曆、假日曆、預約可用性與封鎖日期需要另外檢查。
  • 此輸出並非預測、預約服務、法律期限計算工具、工作日曆、假日曆、時區轉換器或時間戳記產生器。

相等的選取機率並不保證某一特定結果會呈現均勻間隔,重複模式亦可合理地重複某個值。對於財務、法律、競賽、安全或稽核敏感的決策,請使用具備獨立監督並保留證據的書面程序。瀏覽器工具提供的是用於一般公用工作的細心無偏取樣,而非經認證的隨機抽獎服務。

相關閱讀:從您的瀏覽器在 Excel 中產生隨機字元

相關閱讀:如何使用隨機數字產生器(快速指南)