Как я вычисляю дату шесть месяцев с текущей даты с помощью даты и времени модуль Python?

Я думаю, вы немного запутались. Это понятно с пространствами имен. Gds.GoogleMap.UltimatePlus.Math.Mathservice - это , а не имя пространства имен. Имя пространства имен - Gds.GoogleMap.UltimatePlus.Math . MathService - это имя класса .

Если вы поместите оператор

using Gds.GoogleMap.UltimatePlus.Math;

в начало вашего файла, тогда все, что вам нужно сделать, чтобы объявить новый объект, это сказать:

MathService myService = new MathService();

, предполагая, что он имеет конструктор по умолчанию.

Попробуйте.

339
задан Wolf 27 March 2019 в 01:41
поделиться

14 ответов

import datetime
print (datetime.date.today() + datetime.timedelta(6*365/12)).isoformat()
11
ответ дан kmkaplan 23 November 2019 в 00:36
поделиться

Используйте модуль даты и времени Python для добавления timedelta шести месяцев к datetime.today ().

http://docs.python.org/library/datetime.html

необходимо ли будет, конечно, решить вопрос, поднятый Иоганнесом WeiГџ - что делают , Вы подразумеваете под 6 месяцами?

0
ответ дан Devin Jeanpierre 23 November 2019 в 00:36
поделиться

Просто используйте метод timetuple , чтобы извлечь месяцы, добавить Ваши месяцы и создать новый dateobject. Если существует уже существующий метод для этого, я не знаю это.

import datetime

def in_the_future(months=1):
    year, month, day = datetime.date.today().timetuple()[:3]
    new_month = month + months
    return datetime.date(year + (new_month / 12), (new_month % 12) or 12, day)

API немного неуклюж, но работает примером. Не будет также, очевидно, работать над угловыми случаями как 31.01.2008 + 1 месяц. :)

9
ответ дан kolypto 23 November 2019 в 00:36
поделиться

Что Вы подразумеваете 'под 6 месяцами'. 13.02.2009 + 6 месяцев == 13.08.2009 или это 13.02.2009 + 6*30 дней?

import mx.DateTime as dt

#6 Months
dt.now()+dt.RelativeDateTime(months=6)
#result is '2009-08-13 16:28:00.84'

#6*30 days
dt.now()+dt.RelativeDateTime(days=30*6)
#result is '2009-08-12 16:30:03.35'
[еще 113] информация приблизительно mx. DateTime

14
ответ дан Johannes Weiss 23 November 2019 в 00:36
поделиться

Нет никакого прямого способа сделать это с датой и временем Python.

Выезд relativedelta вводят в python-dateutil . Это позволяет Вам указать дельту времени в течение многих месяцев.

11
ответ дан Akbar ibrahim 23 November 2019 в 00:36
поделиться

пакет Dateutil имеет реализацию такой функциональности. Но знайте, что это уже будет наивно как другие, на которых указывают.

9
ответ дан zgoda 23 November 2019 в 00:36
поделиться

Ну, это зависит, что Вы подразумеваете под 6 месяцами с текущей даты.

  1. Используя естественные месяцы:

    (day, month, year) = (day, (month+6)%12, year+(month+6)/12)
    
  2. Используя определение банкира, 6*30:

    date += datetime.timedelta(6*30)
    
50
ответ дан alexwlchan 23 November 2019 в 00:36
поделиться

Это не отвечает на конкретный вопрос (использующий datetime только), но, учитывая, что другие предложили использование различных модулей, здесь существует решение с помощью pandas.

import datetime as dt
import pandas as pd

date = dt.date.today() - \
       pd.offsets.DateOffset(months=6)

print(date)

2019-05-04 00:00:00

, Который работает как ожидалось в високосные годы

date = dt.datetime(2019,8,29) - \
       pd.offsets.DateOffset(months=6)
print(date)

2019-02-28 00:00:00
1
ответ дан 23 November 2019 в 00:36
поделиться

Класс QDate в PyQt4 имеет функцию addmonths.

>>>from PyQt4.QtCore import QDate  
>>>dt = QDate(2009,12,31)  
>>>required = dt.addMonths(6) 

>>>required
PyQt4.QtCore.QDate(2010, 6, 30)

>>>required.toPyDate()
datetime.date(2010, 6, 30)
3
ответ дан 23 November 2019 в 00:36
поделиться

Просто «svn copy» отсутствующие папки из ветви в багажник рекурсивно.

-121--3021061-

Используйте генератор случайных чисел, который генерирует однородное число с плавающей запятой r между 0 и 1. Если r > p, установите бит на 0, в противном случае установите его на 1

-121--4268599-

Модифицированный ответ Иоганнеса Вея в случае 1new_month = 121. Это отлично работает для меня. Месяцы могут быть положительными или отрицательными.

def addMonth(d,months=1):
    year, month, day = d.timetuple()[:3]
    new_month = month + months
    return datetime.date(year + ((new_month-1) / 12), (new_month-1) % 12 +1, day)
1
ответ дан 23 November 2019 в 00:36
поделиться

Это то, что я придумал. Он перемещает правильное количество месяцев и лет, но игнорирует дни (это было то, что мне было нужно в моей ситуации).

import datetime

month_dt = 4
today = datetime.date.today()
y,m = today.year, today.month
m += month_dt-1
year_dt = m//12
new_month = m%12
new_date = datetime.date(y+year_dt, new_month+1, 1)
0
ответ дан 23 November 2019 в 00:36
поделиться

Я использую эту функцию, чтобы изменить год и месяц, но сохранить день:

def replace_month_year(date1, year2, month2):
    try:
        date2 = date1.replace(month = month2, year = year2)
    except:
        date2 = datetime.date(year2, month2 + 1, 1) - datetime.timedelta(days=1)
    return date2

Вы должны написать:

new_year = my_date.year + (my_date.month + 6) / 12
new_month = (my_date.month + 6) % 12
new_date = replace_month_year(my_date, new_year, new_month)
0
ответ дан 23 November 2019 в 00:36
поделиться

Итак, вот пример dateutil.relativedelta, который я нашел полезным для итерации по прошлому году, пропуская каждый раз месяц до текущей даты:

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> today = datetime.datetime.today()
>>> month_count = 0
>>> while month_count < 12:
...  day = today - relativedelta(months=month_count)
...  print day
...  month_count += 1
... 
2010-07-07 10:51:45.187968
2010-06-07 10:51:45.187968
2010-05-07 10:51:45.187968
2010-04-07 10:51:45.187968
2010-03-07 10:51:45.187968
2010-02-07 10:51:45.187968
2010-01-07 10:51:45.187968
2009-12-07 10:51:45.187968
2009-11-07 10:51:45.187968
2009-10-07 10:51:45.187968
2009-09-07 10:51:45.187968
2009-08-07 10:51:45.187968

Как и в других ответах, вы должны понять, что вы на самом деле подразумеваете под "через 6 месяцев". Если вы имеете в виду "сегодняшний день месяца в месяце через шесть лет в будущем", то подойдет следующее:

datetime.datetime.now() + relativedelta(months=6)
13
ответ дан 23 November 2019 в 00:36
поделиться

Это решение работает правильно в декабре, чего нет в большинстве ответов на этой странице. Вам нужно сначала сдвинуть месяцы с базы 1 (например, январь = 1) на базу 0 (например, январь = 0), прежде чем использовать модуль (%) или целочисленное деление (//), в противном случае ноябрь (11) плюс 1 месяц даст вам 12 , что при нахождении остатка (12% 12) дает 0.

(И не предлагайте "(месяц% 12) + 1" или октябрь + 1 = декабрь!)

def AddMonths(d,x):
    newmonth = ((( d.month - 1) + x ) % 12 ) + 1
    newyear  = d.year + ((( d.month - 1) + x ) / 12 ) 
    return datetime.date( newyear, newmonth, d.day)

Однако ... Это не объясняет проблему как 31 января + один месяц. Итак, мы возвращаемся к OP - что вы имеете в виду, добавляя месяц? Один путь - вернуться, пока не дойдете до действительного дня, учитывая, что большинство людей считает, что последний день января плюс один месяц равняется последнему дню февраля. Это также будет работать с отрицательными числами месяцев. Доказательство:

>>> import datetime
>>> AddMonths(datetime.datetime(2010,8,25),1)
datetime.date(2010, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),4)
datetime.date(2010, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),5)
datetime.date(2011, 1, 25)
>>> AddMonths(datetime.datetime(2010,8,25),13)
datetime.date(2011, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),24)
datetime.date(2012, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-1)
datetime.date(2010, 7, 25)
>>> AddMonths(datetime.datetime(2010,8,25),0)
datetime.date(2010, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-12)
datetime.date(2009, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-8)
datetime.date(2009, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-7)
datetime.date(2010, 1, 25)>>> 
14
ответ дан 23 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: