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

Pythonで日付から「年の何日目か」を求める方法

「YYYY-MM-DD」形式の日付が与えられたとき、その日がその年の何日目にあたるかを返すプログラムを考えてみましょう。たとえば、日付が「2019-02-10」であれば、これはその年の41日目に相当します。

解決のための手順

この問題は、以下のステップで解くことができます。

  • 各月の日数を格納した配列Dを用意します。例:[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  • 日付文字列を年・月・日のリストに変換します。
  • うるう年の場合は、2月の日数を29日に変更します。
  • 1月から(対象の月 − 1)までの累積日数を合計し、そこに「日」の数を加えて答えとします。

実装例

以下のコードを見ると、処理の流れがより理解しやすくなります。

class Solution(object):
   def dayOfYear(self, date):
      days = [0,31,28,31,30,31,30,31,31,30,31,30,31]
      d = list(map(int,date.split("-")))
      if d[0] % 400 == 0:
         days[2]+=1
      elif d[0]%4 == 0 and d[0]%100!=0:
         days[2]+=1
      for i in range(1,len(days)):
         days[i]+=days[i-1]
      return days[d[1]-1]+d[2]
ob1 = Solution()
print(ob1.dayOfYear("2019-02-10"))

コードの解説

このコードでは、まず各月の日数を配列として定義し、日付文字列を「-」で分割して年・月・日の整数リストに変換しています。

うるう年の判定は、西暦が400で割り切れる場合、または4で割り切れて100では割り切れない場合に行われます。該当する場合は、2月の日数を28から29へと1つ増やします。

その後、ループで累積和を計算することで、各月末時点での通算日数を求めています。最後に、指定された月の前月までの累積日数に「日」を加えることで、その日の年間通算日が得られます。

入力

"2019-02-10"

出力

41

  1. Pythonでカレンダーを作る方法!calendarモジュールの基本と使い方を解説

    Pythonには、カレンダーを扱うためのcalendarという標準モジュールが組み込まれています。この記事では、calendarモジュールの基本的な使い方について解説していきます。calendarモジュールでは、1週間は月曜日から始まり日曜日に終わります。また、このモジュールはグレゴリオ暦(西暦)に準拠しています。それでは、calendarモジュールの便利なメソッドをいくつか見ていきましょう。年間カレンダーを取得する特定の年のカレンダー全体を取得したい場合は、calendar.calendar(year)クラスのインスタンスを作成し、それを出力します。以下に具体例を示します。コード例# cal

  2. Pythonデバッガー(pdb)の使い方を徹底解説!基本コマンドからブレークポイントまで

    Pythonデバッガー(pdb)とはソフトウェア開発の分野では、プログラム内のエラー(バグ)を発見し修正するプロセスを「デバッグ」と呼びます。Pythonの標準ライブラリにはpdbモジュールが含まれており、これはPythonプログラムをデバッグするための一連のユーティリティを提供します。デバッグ機能はPdbクラスとして定義されており、このモジュールは内部的にbdbおよびcmdモジュールを利用しています。コマンドラインからの起動方法pdbモジュールには非常に便利なコマンドラインインターフェースが用意されています。Pythonスクリプトの実行時に-mスイッチを使ってインポートすることで、デバッガー