2017-08-31 7 views
1

私はpythonスクリプトを使用してボタンオブジェクトから文字列を取得していますので、それを格納する文字列から取得した時刻で日付書式を設定することができますリスト。ボタンオブジェクトから文字列を取得すると、各文字列の日付を設定したいとします(例:29/08/2017 11:30PM30/08/2017 12:00AM30/08/2017 12:30AM)。pythonで前日の日付に変更する

私はこれしようとすると:それは出力が表示されます

if day_date >= 0 and day_date <= 6: 
    if epg_time3 == '12:00AM': 
     if day_date > 0: 
     currentday = datetime.datetime.now() + datetime.timedelta(days = 0) 
     nextday = datetime.datetime.now() + datetime.timedelta(days = self.program_day) 

     if currentday != nextday: 
      epg_time_1 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
      epg_time_2 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
      epg_time_3 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
     elif currentday == nextday: 
      epg_time_1 = datetime.datetime.now() + datetime.timedelta(days = self.program_day) 
      epg_time_2 = datetime.datetime.now() + datetime.timedelta(days = self.program_day - 1) 
      epg_time_3 = datetime.datetime.now() + datetime.timedelta(days = self.program_day - 1) 

:私はEPG_Timesが再び機能呼んでいるとき

self.epg_time_1 
['29/08/2017 11:00PM'] 
self.epg_time_2 
['29/08/2017 11:30PM'] 
self.epg_time_3 
['29/08/2017 12:00AM'] 

が、それはこのような出力が表示されます

self.epg_time_1 
['30/08/2017 11:00PM'] 
self.epg_time_2 
['30/08/2017 11:30PM'] 
self.epg_time_3 
['30/08/2017 12:00AM'] 

これは次のとおりです。

self.epg_time_1 
['30/08/2017 11:00PM'] 
self.epg_time_2 
['30/08/2017 11:30PM'] 
self.epg_time_3 
['31/08/2017 12:00AM'] 

ご覧のとおり、12:00AMは翌日ですので、31ではなく30に設定します。私はdays = self.program_day - 1days = self.program_day + 1から変更されているが、文字列は、変数epg_time_1epg_time_2epg_time_3から11:00PM11:30PM12:00AMを表示するとき、それはこのような出力が表示されます:

:ここ

self.epg_time_1 
['30/08/2017 11:00PM'] 
self.epg_time_2 
['30/08/2017 11:30PM'] 
self.epg_time_3 
['30/08/2017 12:00AM'] 

は完全なコードです

self.program_day = list() 

def EPG_Times(self): 
    self.epg_time_1 = list() 
    self.epg_time_2 = list() 
    self.epg_time_3 = list() 
    epg_time1 = str(self.getControl(344).getLabel()) 
    epg_time2 = str(self.getControl(345).getLabel()) 
    epg_time3 = str(self.getControl(346).getLabel()) 
    day_date = self.program_day 
    day = '' 
    month = '' 
    year = ''  

    if day_date >= 0 and day_date <= 6: 
     if epg_time3 == '12:00AM':  

      if day_date == 0: 
       if epg_time1 == '12:00AM': 
        epg_time_1 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
        epg_time_2 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
        epg_time_3 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
       else: 
        epg_time_1 = datetime.datetime.now() + datetime.timedelta(days = self.program_day) 
        epg_time_2 = datetime.datetime.now() + datetime.timedelta(days = self.program_day) 
        epg_time_3 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 

      else:      
       currentday = datetime.datetime.now() + datetime.timedelta(days = 0) 
       nextday = datetime.datetime.now() + datetime.timedelta(days = self.program_day) 

       if currentday != nextday: 
        epg_time_1 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
        epg_time_2 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
        epg_time_3 = datetime.datetime.now() + datetime.timedelta(days = self.program_day + 1) 
       elif currentday == nextday: 
        epg_time_1 = datetime.datetime.now() + datetime.timedelta(days = self.program_day) 
        epg_time_2 = datetime.datetime.now() + datetime.timedelta(days = self.program_day - 1) 
        epg_time_3 = datetime.datetime.now() + datetime.timedelta(days = self.program_day - 1) 


       epg1_day = epg_time_1.strftime("%d") 
       epg1_month = epg_time_1.strftime("%m") 
       epg1_year = epg_time_1.strftime("%Y") 
       epg2_day = epg_time_2.strftime("%d") 
       epg2_month = epg_time_2.strftime("%m") 
       epg2_year = epg_time_2.strftime("%Y") 
       epg3_day = epg_time_2.strftime("%d") 
       epg3_month = epg_time_2.strftime("%m") 
       epg3_year = epg_time_2.strftime("%Y") 
       half_hour = str(epg1_day + "/" + epg1_month + "/" + epg1_year + " " + epg_time1) 
       one_hour = str(epg2_day + "/" + epg2_month + "/" + epg2_year + " " + epg_time2) 
       one_hour_half = str(epg3_day + "/" + epg3_month + "/" + epg3_year + " " + epg_time3) 


     #Store the times and date in the list.... 
     self.epg_time_1.append(half_hour) 
     self.epg_time_2.append(one_hour) 
     self.epg_time_3.append(one_hour_half) 

コードは、EPG_time(self)関数を呼び出すとボタンオブジェクトから取得する各文字列の前日の日付に変更することが期待されています。 epg_time_1epg_time_2は、文字列11:00PM11:30PMを示した場合、私はepg_time_1epg_time_2ため29/08/2017 11:30PMため29/08/2017 11:00PMに日付と時刻を設定します。 epg_time_3に文字列12:00AMが表示されている場合は、翌日の日付に30/08/2017 12:00AMという文字列を追加します。次の24時間で

epg_time_1epg_time_2は、文字列11:00PM11:30PMを示している場合、私はepg_time_1epg_time_2ため30/08/2017 11:30PMため30/08/2017 11:00PMに日付と時刻を設定します。 epg_time_3が、私はepg_time_1epg_time_2は、文字列11:30PM12:00AMを表示した場合の時間1/09/2017 12:00AM

と翌日の日付に設定したい文字列12:00AMを示した場合、私はそれがあるepg_time_1の前の日付に変更したいです29/08/2017 11:30PMおよび30/08/2017 12:00AM。それはリストに文字列を保存した日時によって変わります。

あなたは私が前の日付に日付を変更し、翌日の日付にpythonを使って追加する方法を教えていただけますか?

+0

このテキストを少しまとめてください。実際には 'strptime'を使って文字列をdatetimesに変換するだけです。変更日数のすべてのロジックは、日時モジュール自体によって処理されます。 – roganjosh

+0

そうですね、私はおそらく例としてここに何かを置くことができますが、提示されたものからあなたの質問に適切に答えることは不可能だと思います。私はいくつかの前提を作らなければならないでしょう。異なる日時を表す3つの文字列のリストを取得するには、これらに一定の日数(1から6まで)を追加する必要があります。この変更を反映させるにはdatetimesを使用しますか? – roganjosh

答えて

0

あなたの質問には問題を正確に特定するのが難しいテキストがたくさんあります。ただし、特定の日付に可変日数を追加し、その月が更新されていることを確認する必要があります。

は、あなたはそれが些細なtimedeltaは(あなたが両方timedeltastrftimeを使用しますが、この重要なメソッドを欠場)を追加してから戻ったばかりの文字列に変換することができた、日付時刻にあなたの日付を変換するために、datetime.datetime.strptime()メソッドを使用する必要があります。

import datetime as dt 

def add_days(datelist, days_to_add): 
    # Convert the strings to datetime objects 
    datelist = [dt.datetime.strptime(item, '%d/%m/%Y %I:%M%p') 
       for item in datelist] 

    # Add a variable number of days (can be negative) to the datetimes 
    mod_dates = [item + dt.timedelta(days=days_to_add) for item in datelist] 

    # Convert back to strings 
    str_dates = [dt.datetime.strftime(item, '%d/%m/%Y %I:%M%p') 
       for item in mod_dates] 
    return str_dates 

# This is the list right at the top of your question 
a = ['29/08/2017 11:30PM', '30/08/2017 12:00AM', '30/08/2017 12:30AM'] 

print("Start:") 
print(a) 
b = add_days(a, 1) 
print("After 1 call:") 
print(b) 
c = add_days(b, 1) 
print("After 2 calls:") 
print(c) 
関連する問題