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

Pythonで12時間形式の時刻に分を追加する方法


ここでは、am または pm の接尾辞が付いた12時間制の時刻を表す文字列と、整数 n が与えられた場合に、その時刻へ n 分を加算し、同じ形式で新しい時刻を返す方法を解説します。

例えば、入力が s = "8:20pm"n = 150 の場合、出力は 10:50pm になります。

解決の手順

この問題を解くために、以下の手順に従います。

  • h, m: 文字列 s から「時」と「分」の部分を取り出します
  • h: h を 12 で割った余りに置き換えます(h mod 12)
  • 時刻 s が 'pm' の場合は、h に 12 を加算します(24時間表現へ変換)
  • t: h × 60 + m + n を計算し、総分数を求めます
  • h, m: t ÷ 60 の商を h、余りを m とします(divmodを使用)
  • h: h を 24 で割った余りに置き換え、日をまたぐケースに対応します
  • suffix: h < 12 なら 'a'(午前)、それ以外なら 'p'(午後)とします
  • h: 再び h を 12 で割った余りに置き換えます
  • h が 0 の場合は、h を 12 に設定します(12時間制では 0 時は 12 時と表記するため)
  • 最後に「時:分+接尾辞」の形式で結果を返します

実装例

理解を深めるために、以下の実装を見てみましょう。

class Solution:
   def solve(self, s, n):
      h, m = map(int, s[:-2].split(':'))
      h %= 12
      if s[-2:] == 'pm':
         h += 12
      t = h * 60 + m + n
      h, m = divmod(t, 60)
      h %= 24
      suffix = 'a' if h < 12 else 'p'
      h %= 12
      if h == 0:
         h = 12
      return "{:02d}:{:02d}{}m".format(h, m, suffix)
ob = Solution()
print(ob.solve("8:20pm", 150))

入力

"8:20pm", 150

出力

10:50pm

コードのポイント

  • s[:-2].split(':') により、「am/pm」を除いた時刻部分を分割して数値化しています
  • divmod(t, 60) を使うことで、商(時間)と余り(分)を同時に取得でき、コードが簡潔になります
  • "{:02d}:{:02d}{}m".format(...) によって、分や時が一桁でも必ず2桁でゼロ埋めされ、見やすい出力になります

このアルゴリズムを使えば、日をまたいだ時刻の加算にも正しく対応できるため、12時間形式の時刻計算を扱うさまざまな場面で応用できます。

  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つのベクトルから単一のス