Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】通用时间解析

2025年09月26日に「Dev.to」が公開したITニュース「通用时间解析」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

ISO 8601や日本語・中国語などの自然言語、相対時間といった多様な形式の時刻文字列を、プログラムで扱える数値(Unixタイムスタンプ)に変換するPython関数を解説。`datetime`や`dateparser`を組み合わせ、複雑な時刻解析を統一的に行う。

出典: 通用时间解析 | Dev.to公開日:

ITニュース解説

システム開発において、日付や時刻は非常に重要な情報でありながら、その扱いは複雑だ。人々が日常生活で使う時間の表現は多岐にわたり、「今日」「明日」「来週月曜日」「2024年5月10日」「3日前」「午前9時23分」など、様々な形式が存在する。これらの多様な時間表現を、コンピュータが一貫して処理できる共通の形式に変換する仕組みは、多くのシステムで不可欠となる。今回紹介する「汎用時間解析アルゴリズム」は、そうした課題を解決するためのPythonコードである。

このアルゴリズムの目的は、与えられたあらゆる形式の時刻文字列を、コンピュータが最も効率的に扱える「UNIXタイムスタンプ」という整数値に変換することにある。UNIXタイムスタンプとは、1970年1月1日午前0時0分0秒(UTC)からの経過秒数を表す数値だ。この形式に統一することで、異なる地域やシステム間での時刻の比較や計算が容易になり、データベースへの保存など、様々な処理が標準化される。

コードの中心となるのはparse_timeという関数だ。この関数は、入力された時刻文字列を分析し、最適な方法でUNIXタイムスタンプへと変換しようと試みる。その処理は単一の方法に頼るのではなく、複数の解析手法を優先順位をつけて順番に試していく「フォールバック」の戦略を採用している点が特徴だ。これにより、より多くの多様な時間表現に対応できる柔軟性を実現している。

まず、この関数は入力値が有効な文字列であるかを確認する。これは、意図しないデータが入力された場合にエラーを防ぐための基本的ながら重要なステップである。

次に、最も厳密で国際的に広く使われる「ISO 8601」形式の時刻を優先して解析する。これは_parse_iso8601という内部関数で行われ、Python標準ライブラリのdatetime.fromisoformatを使って、2025-09-03T09:23:53.000Zのような厳格な形式を解析する。ZはUTC(協定世界時)を意味し、タイムゾーン情報も正確に処理される。もしこの形式で解析できれば、その結果がすぐにUNIXタイムスタンプとして返されるため、処理は迅速に終了する。

ISO 8601形式で解析できなかった場合、次に特殊な相対時間表現をチェックする。例えば「刚刚」や「刚才」(いずれも「ついさっき」「少し前」といった意味の中国語)といった表現が入力された場合、この関数は現在のシステム時刻をUNIXタイムスタンプとして返す。これは、非常に曖昧な時間表現に対して、最も妥当な解釈を与えるための工夫である。

さらに、日付が省略され、時と分のみが入力された場合、例えば「09:23」のような形式だ。この場合、_is_valid_hour_time関数で有効な時分形式であるかを確認した後、今日の年月日を自動的に補完し、「2024-05-10 09:23」のように完全な日付と時刻の文字列を作成する。これにより、部分的な情報でも正確な時刻を特定できるようにする。

日本語やその他の自然言語で表現された時間を解析するために、このアルゴリズムはdateparserという強力な外部ライブラリを積極的に利用している。まず_parse_chinese_time関数が、中国語の「年」「月」「日」といった文字を'-'' 'に置換するなど、dateparserが扱いやすい形式に整形する。例えば「2024年5月10日」は「2024-5-10」のように変換される。

その後、dateparser.search.search_dates関数を_search_dates_wrapperという内部関数を介して呼び出す。この関数は、文字列の中から日付や時刻を表す部分を賢く探し出すことができる。ここでは、解析言語として日本語(zh)と英語(en)を指定し、日付の順序が「年月日」であることや、厳密な解析、そして過去の日付を優先するといった詳細な設定も行っている。例えば「3日前」や「来週月曜日」といった相対的な表現や、「5月10日」のような不完全な日付表現も、この機能によって現在の文脈に基づいて正確な時刻に変換されることが期待される。

もしsearch_datesでも解析が難しい場合、最終手段としてdateparser.parse関数が用いられる。parse関数は、より広範な日付・時刻形式を解釈する能力を持っており、様々な自然言語の表現を直接UNIXタイムスタンプに変換しようと試みる。

このコードの各解析ステップは、try-exceptブロックで囲まれている。これは、ある解析方法が失敗しても、プログラムがクラッシュすることなく、次の解析方法を試せるようにするための「エラーハンドリング」の仕組みだ。これにより、堅牢性が高まり、予期せぬ入力に対しても柔軟に対応できる。

まとめると、この汎用時間解析アルゴリズムは、システムエンジニアが直面する、人が入力する多様な時間表現をコンピュータが理解できるUNIXタイムスタンプという標準的な形式に統一するための、多段階かつ堅牢なソリューションである。ISO 8601のような厳密な形式から、日本語の自然言語表現、さらには曖昧な相対時間まで、幅広いケースに対応できるよう、複数の強力なツールとフォールバック戦略を組み合わせて構築されている。このような機能は、ユーザーインターフェースから入力された時間をバックエンドシステムで処理する際や、外部データを取り込む際など、多くのシステム開発で非常に役立つだろう。

関連コンテンツ