Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで12時間制の時刻を24時間制に変換する方法

はじめに

プログラミングでは、12時間制(am/pm)で表された時刻を24時間制に変換する処理が必要になることがあります。本記事では、Pythonを使って「08:40pm」のような12時間制の時刻文字列を、「20:40」のような24時間制の表記へ変換する方法を解説します。

問題の概要

例えば、入力として "08:40pm" という文字列が与えられた場合、出力は "20:40" となります。午後(pm)の時刻には12時間を加算し、午前(am)の場合はそのままの値を使用します。

解決の手順

この問題は、以下の手順で解くことができます。

  1. 時(hour)の取得: 文字列の先頭2文字(インデックス0〜1)を整数に変換し、12で割った余りを求めます。これにより、「12:xx」のようなケースでも正しく0時に対応できます。
  2. 分(minutes)の取得: インデックス3〜4の2文字を整数に変換します。
  3. pm判定: インデックス5の文字が 'p' である場合、hour に12を加算します。
  4. 結果の整形: 「時:分」の形式で返します。桁数を揃えるため、2桁のゼロ埋めフォーマットを使うのがポイントです。

実装例

class Solution:
    def solve(self, s):
        hour = int(s[:2]) % 12
        minutes = int(s[3:5])
        if s[5] == 'p':
            hour += 12
        return "{:02}:{:02}".format(hour, minutes)

ob = Solution()
print(ob.solve("08:40pm"))

入力

"08:40pm"

出力

20:40

コードのポイント

  • int(s[:2]) % 12: 午前12時(00:xx am)や午後12時(12:xx pm)を正しく処理するために、12の剰余を取っています。例えば「12:30am」は hour=0 となり「00:30」に変換されます。
  • s[5] == 'p': 文字列の6文字目が 'p'(pm の頭文字)かどうかを判定し、午後であれば12時間を加算します。
  • "{:02}:{:02}".format(...): 時と分を必ず2桁で表示するためのフォーマット指定です。「9:05」ではなく「09:05」のように整形されます。

まとめ

文字列スライスと剰余演算、条件分岐を組み合わせることで、12時間制から24時間制への変換はシンプルに実装できます。datetime モジュールに頼らず自前で変換したい場合にも応用できるテクニックなので、ぜひ覚えておきましょう。

  1. Pythonで時系列データをプロットする方法をわかりやすく解説

    Pythonのmatplotlibを使えば、時系列データ(日時を軸にしたデータ)を簡単にグラフ化できます。ここでは、datetimeオブジェクトを含むデータを折れ線グラフとして描画する基本的な手順を紹介します。 時系列プロットの基本手順 numpyを使用して、x軸(日時データ)とy軸(数値データ)を作成します。 plot()メソッドを使って、作成したx・yのデータをプロットします。 show()メソッドを実行して、図を画面に表示します。 コード例 以下のサンプルコードでは、2021年1月1日の0時から23時までの24個の日時データを生成し、それに対応するランダムな数値をy軸としてプロットし

  2. Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説

    本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス