Python преобразует строковую временную метку salesforce в дату - PullRequest
0 голосов
/ 10 мая 2018

Это строка даты и времени, которую я получаю 2018-05-04T13: 08: 20.000 + 0000. Я хочу конвертировать его в дату 2018-05-04. Ниже приведен цикл for, который я хочу использовать, но просто не могу выделить все часовые секунды и т. Д. Max_data - это строка с 2018-05-04T13: 08: 20.000 + 0000

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = datetime.strptime(max_data,'%Y-%m-%d')
end_date = date.today()
for single_date in daterange(start_date, end_date):
    print single_date.strftime("%Y-%m-%d")

Ответы [ 4 ]

0 голосов
/ 10 мая 2018

Легко сделать в один лайнер:

from datetime import datetime as dt

max_data =  '2018-05-04T13:08:20.000+0000'
date = dt.strptime(max_data.split('T')[0], '%Y-%m-%d')
print (date)
# output: datetime.datetime(2018, 5, 4, 0, 0)
0 голосов
/ 10 мая 2018

Строка метки времени, которую вы имеете, является строкой ISO8601.Вы можете проанализировать информацию этой строки, используя модуль dateutil.parser следующим образом:

import dateutil.parser
Max_data = "2018-05-04T13:08:20.000+0000"
converted_data = dateutil.parser.parse(Max_data)
date_format_string = converted_data.strftime("%Y-%m-%d")

Результат date_format_string равен '2018-05-04'

0 голосов
/ 10 мая 2018

Просто проанализируйте всю строку даты, а затем просто используйте то, что вам нужно, например:

In []:
from datetime import datetime, timedelta

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = datetime.strptime(max_data,"%Y-%m-%dT%H:%M:%S.%f%z")
end_date = datetime.now(start_date.tzinfo)
for single_date in daterange(start_date, end_date):
    print(single_date.strftime("%Y-%m-%d"))

Out[]:
2018-05-04
2018-05-05
2018-05-06
2018-05-07
2018-05-08
2018-05-09

Примечание: вам нужно передать от tzinfo до now(), чтобы получить объект datetime с поддержкой tz(вместо использования date.today())

Примечание: в Py3.7 добавлена ​​стандартная библиотека, datetime.fromisoformat().

0 голосов
/ 10 мая 2018

Используя предоставленную вами информацию, я сделал следующее с моей версией вашего кода (только те части, которые вам нужно исправить)

Max_data =  '2018-05-04T13:08:20.000+0000' #How ever max data is assigned, this is not needed

print Max_data[:10] # This will only print the 2018-05-04 while removing everything else

Выход: 2018-05-04

Использование Max_data[:10] - это то, что вам нужно (по крайней мере, один метод. Это не то же самое, что исходный код, поэтому вам может не понравиться это исправление, хотя оно короче исходного кода.

Удалите datetime.strptime(max_data,'%Y-%m-%d') и замените его на Max_data[:10]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...