복붙노트

[PYTHON] datetime을 하루 만에 늘리는 방법은 무엇입니까?

PYTHON

datetime을 하루 만에 늘리는 방법은 무엇입니까?

datetime의 날짜를 늘리는 방법은 무엇입니까?

for i in range(1, 35)
    date = datetime.datetime(2003, 8, i)
    print(date)

하지만 몇 개월에서 몇 년을 올바르게 통과해야합니까? 어떤 아이디어?

해결법

  1. ==============================

    1.

    date = datetime.datetime(2003,8,1,12,4,5)
    for i in range(5): 
        date += datetime.timedelta(days=1)
        print(date) 
    
  2. ==============================

    2.timedelta 객체를 사용하여 날짜를 증가시킬 수 있습니다.

    timedelta 객체를 사용하여 날짜를 증가시킬 수 있습니다.

    import datetime
    
    datetime.datetime.now() + datetime.timedelta(days=1)
    

    Python 문서에서 timedelta 객체를 찾습니다. http://docs.python.org/library/datetime.html

  3. ==============================

    3.dateutil의 relativedelta를 사용하여 날짜를 추가하는 다른 방법은 다음과 같습니다.

    dateutil의 relativedelta를 사용하여 날짜를 추가하는 다른 방법은 다음과 같습니다.

    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    
    print 'Today: ',datetime.now().strftime('%d/%m/%Y %H:%M:%S') 
    date_after_month = datetime.now()+ relativedelta(day=1)
    print 'After a Days:', date_after_month.strftime('%d/%m/%Y %H:%M:%S')
    

    산출:

  4. ==============================

    4.시간대가 UTC를 기준으로 오프셋을 변경한다고 생각하지 않기 때문에 모든 현재 답변이 잘못된 경우가 있습니다. 따라서 24 시간을 추가하는 것이 달력을 추가하는 것과는 다른 경우도 있습니다.

    시간대가 UTC를 기준으로 오프셋을 변경한다고 생각하지 않기 때문에 모든 현재 답변이 잘못된 경우가 있습니다. 따라서 24 시간을 추가하는 것이 달력을 추가하는 것과는 다른 경우도 있습니다.

    다음 솔루션은 사모아에서 작동하며 현지 시간 상수를 유지합니다.

    def add_day(today):
        """
        Add a day to the current day.
    
        This takes care of historic offset changes and DST.
    
        Parameters
        ----------
        today : timezone-aware datetime object
    
        Returns
        -------
        tomorrow : timezone-aware datetime object
        """
        today_utc = today.astimezone(datetime.timezone.utc)
        tz = today.tzinfo
        tomorrow_utc = today_utc + datetime.timedelta(days=1)
        tomorrow_utc_tz = tomorrow_utc.astimezone(tz)
        tomorrow_utc_tz = tomorrow_utc_tz.replace(hour=today.hour,
                                                  minute=today.minute,
                                                  second=today.second)
        return tomorrow_utc_tz
    
    # core modules
    import datetime
    
    # 3rd party modules
    import pytz
    
    
    # add_day methods
    def add_day(today):
        """
        Add a day to the current day.
    
        This takes care of historic offset changes and DST.
    
        Parameters
        ----------
        today : timezone-aware datetime object
    
        Returns
        -------
        tomorrow : timezone-aware datetime object
        """
        today_utc = today.astimezone(datetime.timezone.utc)
        tz = today.tzinfo
        tomorrow_utc = today_utc + datetime.timedelta(days=1)
        tomorrow_utc_tz = tomorrow_utc.astimezone(tz)
        tomorrow_utc_tz = tomorrow_utc_tz.replace(hour=today.hour,
                                                  minute=today.minute,
                                                  second=today.second)
        return tomorrow_utc_tz
    
    
    def add_day_datetime_timedelta_conversion(today):
        # Correct for Samoa, but dst shift
        today_utc = today.astimezone(datetime.timezone.utc)
        tz = today.tzinfo
        tomorrow_utc = today_utc + datetime.timedelta(days=1)
        tomorrow_utc_tz = tomorrow_utc.astimezone(tz)
        return tomorrow_utc_tz
    
    
    def add_day_dateutil_relativedelta(today):
        # WRONG!
        from dateutil.relativedelta import relativedelta
        return today + relativedelta(days=1)
    
    
    def add_day_datetime_timedelta(today):
        # WRONG!
        return today + datetime.timedelta(days=1)
    
    
    # Test cases
    def test_samoa(add_day):
        """
        Test if add_day properly increases the calendar day for Samoa.
    
        Due to economic considerations, Samoa went from 2011-12-30 10:00-11:00
        to 2011-12-30 10:00+13:00. Hence the country skipped 2011-12-30 in its
        local time.
    
        See https://stackoverflow.com/q/52084423/562769
    
        A common wrong result here is 2011-12-30T23:59:00-10:00. This date never
        happened in Samoa.
        """
        tz = pytz.timezone('Pacific/Apia')
        today_utc = datetime.datetime(2011, 12, 30, 9, 59,
                                      tzinfo=datetime.timezone.utc)
        today_tz = today_utc.astimezone(tz)  # 2011-12-29T23:59:00-10:00
        tomorrow = add_day(today_tz)
        return tomorrow.isoformat() == '2011-12-31T23:59:00+14:00'
    
    
    def test_dst(add_day):
        """Test if add_day properly increases the calendar day if DST happens."""
        tz = pytz.timezone('Europe/Berlin')
        today_utc = datetime.datetime(2018, 3, 25, 0, 59,
                                      tzinfo=datetime.timezone.utc)
        today_tz = today_utc.astimezone(tz)  # 2018-03-25T01:59:00+01:00
        tomorrow = add_day(today_tz)
        return tomorrow.isoformat() == '2018-03-26T01:59:00+02:00'
    
    
    to_test = [(add_day_dateutil_relativedelta, 'relativedelta'),
               (add_day_datetime_timedelta, 'timedelta'),
               (add_day_datetime_timedelta_conversion, 'timedelta+conversion'),
               (add_day, 'timedelta+conversion+dst')]
    print('{:<25}: {:>5} {:>5}'.format('Method', 'Samoa', 'DST'))
    for method, name in to_test:
        print('{:<25}: {:>5} {:>5}'
              .format(name,
                      test_samoa(method),
                      test_dst(method)))
    
    Method                   : Samoa   DST
    relativedelta            :     0     0
    timedelta                :     0     0
    timedelta+conversion     :     1     0
    timedelta+conversion+dst :     1     1
    
  5. from https://stackoverflow.com/questions/3240458/how-to-increment-a-datetime-by-one-day by cc-by-sa and MIT license