Как преобразовать текстовую строку в часовой формат с помощью python [duplicate]

Что вам нужно понять, так это объем переменных в javascript, основанный на функции. Это важная разница, чем, скажем, c #, где у вас есть область блока, и просто копирование переменной в единицу внутри будет работать.

Обертывание ее в функции, которая оценивает возвращение функции, как ответ афкакера, сделает трюк, так как переменная теперь имеет область видимости функции.

Существует также ключевое слово let вместо var, что позволит использовать правило области блока. В этом случае определение переменной внутри for сделает трюк. Тем не менее, ключевое слово let не является практическим решением из-за совместимости.

var funcs = {};
for (var i = 0; i < 3; i++) {
    let index = i;          //add this
    funcs[i] = function() {            
        console.log("My value: " + index); //change to the copy
    };
}
for (var j = 0; j < 3; j++) {
    funcs[j]();                        
}
1489
задан Maxime Lorant 11 June 2016 в 15:33
поделиться

13 ответов

datetime.strptime - основная процедура для разбора строк в datetimes. Он может обрабатывать всевозможные форматы с форматом, определяемым строкой формата, которую вы ему даете:

from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

Результирующий объект datetime является наименее частым.

Ссылки:

Примечания:

  • strptime = "время синтаксического разбора"
  • strftime = "время форматирования строки"
  • Произнести его вслух сегодня и amp; вам не придется искать его через 6 месяцев.
2446
ответ дан user2357112 28 August 2018 в 21:56
поделиться

Вот два решения, использующие Pandas для преобразования дат, отформатированных как строки в объекты datetime.date.

import pandas as pd

dates = ['2015-12-25', '2015-12-26']

# 1) Use a list comprehension.
>>> [d.date() for d in pd.to_datetime(dates)]
[datetime.date(2015, 12, 25), datetime.date(2015, 12, 26)]

# 2) Convert the dates to a DatetimeIndex and extract the python dates.
>>> pd.DatetimeIndex(dates).date.tolist()
[datetime.date(2015, 12, 25), datetime.date(2015, 12, 26)]

Сроки

dates = pd.DatetimeIndex(start='2000-1-1', end='2010-1-1', freq='d').date.tolist()

>>> %timeit [d.date() for d in pd.to_datetime(dates)]
# 100 loops, best of 3: 3.11 ms per loop

>>> %timeit pd.DatetimeIndex(dates).date.tolist()
# 100 loops, best of 3: 6.85 ms per loop

И вот как преобразовать OP исходные даты-времени:

datetimes = ['Jun 1 2005  1:33PM', 'Aug 28 1999 12:00AM']

>>> pd.to_datetime(datetimes).to_pydatetime().tolist()
[datetime.datetime(2005, 6, 1, 13, 33), 
 datetime.datetime(1999, 8, 28, 0, 0)]

Существует много вариантов преобразования строк из Pandas Timestamps с помощью to_datetime, поэтому проверьте docs , если вам что-то особенное.

Аналогично, метки времени имеют много свойств и методов , к которым можно получить доступ в дополнение к .date

20
ответ дан Alexander 28 August 2018 в 21:56
поделиться

Что-то, что здесь не упоминается и полезно: добавление суффикса к дню. Я отделил логику суффиксов, чтобы вы могли использовать ее для любого числа, которое вам нравится, а не только даты.

import time

def num_suffix(n):
    '''
    Returns the suffix for any given int
    '''
    suf = ('th','st', 'nd', 'rd')
    n = abs(n) # wise guy
    tens = int(str(n)[-2:])
    units = n % 10
    if tens > 10 and tens < 20:
        return suf[0] # teens with 'th'
    elif units <= 3:
        return suf[units]
    else:
        return suf[0] # 'th'

def day_suffix(t):
    '''
    Returns the suffix of the given struct_time day
    '''
    return num_suffix(t.tm_mday)

# Examples
print num_suffix(123)
print num_suffix(3431)
print num_suffix(1234)
print ''
print day_suffix(time.strptime("1 Dec 00", "%d %b %y"))
print day_suffix(time.strptime("2 Nov 01", "%d %b %y"))
print day_suffix(time.strptime("3 Oct 02", "%d %b %y"))
print day_suffix(time.strptime("4 Sep 03", "%d %b %y"))
print day_suffix(time.strptime("13 Nov 90", "%d %b %y"))
print day_suffix(time.strptime("14 Oct 10", "%d %b %y"))​​​​​​​
21
ответ дан Aram Kocharyan 28 August 2018 в 21:56
поделиться

Я собрал проект, который может преобразовать некоторые действительно аккуратные выражения. Проверьте timestring .

Вот несколько примеров ниже:

pip install timestring
>>> import timestring
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm')
<timestring.Date 2015-08-15 20:40:00 4491909392>
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm').date
datetime.datetime(2015, 8, 15, 20, 40)
>>> timestring.Range('next week')
<timestring.Range From 03/10/14 00:00:00 to 03/03/14 00:00:00 4496004880>
>>> (timestring.Range('next week').start.date, timestring.Range('next week').end.date)
(datetime.datetime(2014, 3, 10, 0, 0), datetime.datetime(2014, 3, 14, 0, 0))
461
ответ дан Bruno Bronosky 28 August 2018 в 21:56
поделиться

Использовать третью сторону dateutil library:

from dateutil import parser
dt = parser.parse("Aug 28 1999 12:00AM")

Он может обрабатывать большинство форматов даты, включая тот, который вам нужно проанализировать. Это удобнее, чем strptime, поскольку он может угадывать правильный формат большую часть времени.

Это очень полезно для написания тестов, где читаемость важнее производительности.

Вы можете установить его с:

pip install python-dateutil
631
ответ дан Decko 28 August 2018 в 21:56
поделиться
In [34]: import datetime

In [35]: _now = datetime.datetime.now()

In [36]: _now
Out[36]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000)

In [37]: print _now
2016-01-19 09:47:00.432000

In [38]: _parsed = datetime.datetime.strptime(str(_now),"%Y-%m-%d %H:%M:%S.%f")

In [39]: _parsed
Out[39]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000)

In [40]: assert _now == _parsed
11
ответ дан guneysus 28 August 2018 в 21:56
поделиться

У многих временных меток есть предполагаемый часовой пояс. Чтобы гарантировать, что ваш код будет работать в каждом часовом поясе, вы должны использовать UTC внутренне и присоединять часовой пояс каждый раз, когда посторонний объект входит в систему.

Python 3.2 +:

>>> datetime.datetime.strptime(
...     "March 5, 2014, 20:13:50", "%B %d, %Y, %H:%M:%S"
... ).replace(tzinfo=datetime.timezone(datetime.timedelta(hours=-3)))
30
ответ дан Janus Troelsen 28 August 2018 в 21:56
поделиться

Он будет полезен для преобразования строки в datetime, а также с часовым поясом

def convert_string_to_time(date_string, timezone):
    from datetime import datetime
    import pytz
    date_time_obj = datetime.strptime(date_string[:26], '%Y-%m-%d %H:%M:%S.%f')
    date_time_obj_timezone = pytz.timezone(timezone).localize(date_time_obj)

     return date_time_obj_timezone

date = '2018-08-14 13:09:24.543953+00:00'
TIME_ZONE = 'UTC'
date_time_obj_timezone = convert_string_to_time(date, TIME_ZONE)
0
ответ дан Kanish Mathew 28 August 2018 в 21:56
поделиться

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

>>> import datetime
>>> date = datetime.date(int('2017'),int('12'),int('21'))
>>> date
datetime.date(2017, 12, 21)
>>> type(date)
<type 'datetime.date'>

. Вы можете передать значения разделенных строк, чтобы преобразовать их в тип даты, например:

selected_month_rec = '2017-09-01'
date_formate = datetime.date(int(selected_month_rec.split('-')[0]),int(selected_month_rec.split('-')[1]),int(selected_month_rec.split('-')[2]))

Вы получите результирующее значение в формате даты.

8
ответ дан Peter Mortensen 28 August 2018 в 21:56
поделиться

Вы можете использовать easy_date , чтобы сделать его легким:

import date_converter
converted_date = date_converter.string_to_datetime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
5
ответ дан Raphael Amoedo 28 August 2018 в 21:56
поделиться

Помните об этом, и вам не нужно было снова запутываться в преобразовании даты и времени.

String to datetime object = strptime

объект datetime для других форматов = strftime

Jun 1 2005 1:33PM

равно

%b %d %Y %I:%M%p

% b Месяц по сокращенному имени locale (июн)

% d День месяца как десятичное число с нулевым запасом (1)

% Y Год со столетием как десятичное число (2015)

% I Час (12-часовые часы) в виде десятичного числа с нулевым запасом (01)

% M Минута как десятичное число с нулевым запасом (33)

% p Значения локали либо AM или PM (PM)

, поэтому вам нужно strptime, т.е. преобразование string в

>>> dates = []
>>> dates.append('Jun 1 2005  1:33PM')
>>> dates.append('Aug 28 1999 12:00AM')
>>> from datetime import datetime
>>> for d in dates:
...     date = datetime.strptime(d, '%b %d %Y %I:%M%p')
...     print type(date)
...     print date
... 

Выход

<type 'datetime.datetime'>
2005-06-01 13:33:00
<type 'datetime.datetime'>
1999-08-28 00:00:00

Что если у вас есть другой формат дат, вы можете использовать panda или dateutil.parse

>>> import dateutil
>>> dates = []
>>> dates.append('12 1 2017')
>>> dates.append('1 1 2017')
>>> dates.append('1 12 2017')
>>> dates.append('June 1 2017 1:30:00AM')
>>> [parser.parse(x) for x in dates]

OutPut

[datetime.datetime(2017, 12, 1, 0, 0), datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 1, 12, 0, 0), datetime.datetime(2017, 6, 1, 1, 30)]
35
ответ дан Rizwan Mumtaz 28 August 2018 в 21:56
поделиться

См. мой ответ .

В реальных данных это реальная проблема: множественные, несоответствующие, неполные, непоследовательные и многоязычные / регистровые форматы даты, часто смешанные свободно в один набор данных.

Нам нужно попробовать ... уловить несколько форматов datetime fmt1, fmt2, ..., fmtn и подавить / обработать исключения (из strptime()) для всех несоответствующих (и, в частности, избегать использования yukky n-deep с отступом лестницы try..catch). См. мое решение

0
ответ дан smci 28 August 2018 в 21:56
поделиться

Пример объекта datetime, посвященного Django Timezone.

import datetime
from django.utils.timezone import get_current_timezone
tz = get_current_timezone()

format = '%b %d %Y %I:%M%p'
date_object = datetime.datetime.strptime('Jun 1 2005  1:33PM', format)
date_obj = tz.localize(date_object)

Это преобразование очень важно для Django и Python, когда у вас есть USE_TZ = True:

RuntimeWarning: DateTimeField MyModel.created received a naive datetime (2016-03-04 00:00:00) while time zone support is active.
12
ответ дан Tarek Kalaji 28 August 2018 в 21:56
поделиться
Другие вопросы по тегам:

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