Как преобразовать дату формата строки в объект datetime в python? [Дубликат]

Это, очевидно, старый пост, но я нашел несколько способов сократить его. Также есть несколько конкретных чисел, чтобы сделать недействительными по этой ссылке: http://www.snopes.com/business/taxes/woolworth.asp

Вот как я это сделал , Я мог бы использовать регулярные выражения для повторения чисел, но с конкретными для недействительности мы могли бы также добавить их через fives в этот список (более 5 будет недействительным в любом случае из-за проверки номера области). Я также оставил isNumeric (ssn), потому что поле является числовым и уже разделяет символы перед вызовом функции проверки.

function validateSSN(ssn) {
    // validate format (no all zeroes, length 9
    if (!ssn.match(/^[1-9][0-9]{2}[1-9][0-9]{1}[1-9][0-9]{3}/)
            || ssn.length!=9) return false;

    // validate area number (1st 3 digits)
    var area=parseInt(ssn.substring(0, 3));
    //  standard      railroad numbers (pre-1963)
    if (area>649 && !(area>=700 && area<=728)) return false;

    // disallow specific invalid number
    if (ssn=='078051120' || // fun fact: some idiot boss put his
                            // secretary's ssn in wallets he sold,
                            // now this is 40000 people's ssn
        ssn=='219099999' || // was used in an ad by the Social Security
                            // Administration
        ssn=='123456789' || // although valid it's not yet assigned and
                            // you're not likely to meet the person who
                            // will get it
        ssn=='123121234' || // probably is assigned to someone but more
                            // likely to find someone trying to fake a
                            // number (next is same)
        ssn=='321214321' || // all the rest are likely potentially
                            // valid, but most likely these numbers are
                            // abused
        ssn=='111111111' ||
        ssn=='222222222' ||
        ssn=='333333333' ||
        ssn=='444444444' ||
        ssn=='555555555') return false;

    return true;
}

592
задан martineau 29 March 2018 в 00:19
поделиться

15 ответов

>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

Взято из http://seehuhn.de/pages/pdate

180
ответ дан Daniel 15 August 2018 в 21:57
поделиться

быстрый и грязный один вкладыш:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

'2013-5-5-1-9-43'

0
ответ дан eqzx 15 August 2018 в 21:57
поделиться
  • 1
    Или более кратко: '-'. Join (map (str, datetime.datetime.now (). Timetuple () [: 6])) – Jelle Zijlstra 11 June 2014 в 05:23
  • 2
    @JelleZijlstra Eh, я предпочитаю выражение генератора над картой. – crhodes 24 August 2015 в 11:08
  • 3
    Какой формат даты «2013-5-5-1-9-43»? Я никогда не видел этот формат где-либо в качестве действительного представления даты / времени. – madoki 9 February 2016 в 19:18
  • 4
    можете ли вы уточнить, что квалифицирует это как недопустимое представление @madoki? вы имеете в виду нестандартные? Основным преимуществом, которое он имеет в большинстве других ответов, является возможность включить его в путь к файлу или каталогу, поскольку пробелы и двоеточия не входят в набор стандартных символов каталога unix. см., например, stackoverflow.com/a/458001/209246 – eqzx 22 February 2018 в 23:07

Вы посмотрели пакет datetime? Я считаю, что у него есть метод fromUnixTimestamp.

-11
ответ дан extraneon 15 August 2018 в 21:57
поделиться
  • 1
    Это не так, но datetime.datetime.fromtimestamp (1284101485) производит datetime.datetime (2010, 9, 10, 8, 51, 25). – Anthony Labarre 10 September 2010 в 08:01
  • 2
    Это то, что я имел в виду:) – extraneon 10 September 2010 в 14:26
  • 3
    Вы должны были заплатить справедливую цену за своего капитана. – Vipin Joshi 7 February 2018 в 07:12
  • 4
    Извините, это не реальный ответ – Máxima Alekz 14 May 2018 в 19:24

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

import datetime

def xldate_to_datetime(xldate):
    temp = datetime.datetime(1899, 12, 30)
    delta = datetime.timedelta(days=xldate)
    return temp+delta

ts = "1284101485"
tsxl = ((int(ts)/60)/60)/24 + 25569
readabledate =  xldate_to_datetime(tsxl)
print(readabledate)
-2
ответ дан Gursel Karacor 15 August 2018 в 21:57
поделиться
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
3
ответ дан itsaruns 15 August 2018 в 21:57
поделиться

Для пользовательской метки времени из отметки времени UNIX я использовал это в сценариях до:

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

Выход:

'26 декабря 2012 г.

32
ответ дан Jared Burrows 15 August 2018 в 21:57
поделиться
  • 1
    Почему это проголосовало один раз? Если вы проголосовали, вы должны хотя бы объяснить, почему вы должны проголосовать за правильный ответ? – Jared Burrows 8 October 2013 в 01:04
  • 2
    Кто снова это сделал? Комментируйте и объясняйте, а не отдельно от проблемы. – Jared Burrows 6 February 2015 в 15:59
  • 3
    Мое предположение: оно ничего не добавляет к принятому ответу, который уже демонстрирует оба метода: .fromtimestamp() и .strftime(). Примечание: getmtime() возвращает float уже. – jfs 16 May 2015 в 13:00
  • 4
    Еще один downvote? Если вы собираетесь спускаться вниз, по крайней мере, скажите почему. – Jared Burrows 9 June 2015 в 03:15
  • 5
    Еще один downvote? Если вы собираетесь спускаться вниз, по крайней мере, скажите почему. – Jared Burrows 22 May 2017 в 19:54

Есть две части:

  1. Конвертировать временную метку unix («секунды с эпохи») в локальное время
  2. Отображать местное время в нужном формате.

Портативный способ получить локальное время, которое работает, даже если местный часовой пояс имел другое смещение utc в прошлом, и python не имеет доступа к базе данных tz, это использовать pytz часовой пояс:

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal

unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

Чтобы отобразить его, вы можете использовать любой формат времени, поддерживаемый вашей системой, например:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

Если вам не нужен локальный время, чтобы получить читаемое время UTC:

utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

Если вам не нужны проблемы с часовым поясом, которые могут повлиять на , какая дата будет возвращена или если python имеет доступ к базе данных tz в вашей системе:

local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

На Python 3 вы можете получить дату и время, относящиеся к часовому поясу, используя только stdlib (смещение UTC может быть неправильным, если python не имеет доступа к tz база данных в вашей системе, например, в Windows):

#!/usr/bin/env python3
from datetime import datetime, timezone

utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))

Функции модуля time представляют собой тонкие обертки вокруг соответствующих C API, и поэтому они могут быть менее портативными, чем соответствующие datetime методы, иначе вы могли бы их использовать:

#!/usr/bin/env python
import time

unix_timestamp  = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) 
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))  
41
ответ дан jfs 15 August 2018 в 21:57
поделиться
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'
66
ответ дан John La Rooy 15 August 2018 в 21:57
поделиться
  • 1
    time.ctime() и time.localtime() могут не совпадать с прошлыми датами, если местный часовой пояс имеет другое значение utc offset. Вам нужна историческая база данных часовых поясов, например, предоставляемая модулем pytz (или вашей ОС). Или просто работайте в UTC и используйте time.gmtime(). datetime может обеспечить более широкий диапазон дат, поэтому datetime.utcfromtimestamp() можно использовать вместо функций time. – jfs 23 November 2013 в 03:30

Вы можете преобразовать текущее время, подобное этому

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

. Преобразование даты в строку в разные форматы.

import datetime,time

def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)

def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013
22
ответ дан Nick 15 August 2018 в 21:57
поделиться

я только что успешно использовал:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
1
ответ дан nimmy 15 August 2018 в 21:57
поделиться
  • 1
    Огромное спасибо. Это именно то, что я искал! – Zargoon 6 June 2016 в 01:54

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

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
-1
ответ дан Raphael Amoedo 15 August 2018 в 21:57
поделиться
  • 1
    Каждое программирование имеет свои собственные преобразователи даты и времени. Никогда не нужно использовать моды / рамки для этого – JosFabre 9 December 2015 в 15:55
  • 2
    strptime и strftime не интуитивно понятны ... И даже не читаемы ... Но я понимаю и уважаю ваше мнение – Raphael Amoedo 9 December 2015 в 19:06
  • 3
    Этому нужно «никогда не использовать». неправильно. Это зависит от языка и качества встроенных библиотек. Javascript имеет моменты. Js и Java имеют время Joda, которые оба более популярны, чем соответствующие встроенные утилиты для преобразования даты и времени (настолько, что время Joda повлияло на обновленные стандартные библиотеки Java 8). Тем не менее, если этот вопрос не требует хороших сторонних библиотек, предпочтительнее дать ответ на основе стандартной библиотеки. – Hejazzman 23 December 2015 в 00:57
  • 4
    Я стою исправленным @NikosVentouras. У меня только что «JS Date в IE ведет себя по-другому», выпуск в первый раз. Таким образом, я закончил использование moment.js – JosFabre 19 January 2016 в 11:28

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

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

Где posix_time - это эпоха эпохи Posix, которую вы хотите преобразовать

125
ответ дан rkachach 15 August 2018 в 21:57
поделиться
  • 1
    import datetime, pytz datetime.datetime (1990, 1, 1, tzinfo = pytz.utc) – yauheni_selivonchyk 23 June 2017 в 18:09

Помимо использования пакета time / datetime, pandas также можно использовать для решения одной и той же проблемы. Вот как мы можем использовать pandas для преобразования метки времени в читаемую дату:

Временные метки могут быть в двух форматах:

  1. 13 цифр (миллисекунды). Чтобы преобразовать миллисекунды на сегодняшний день, используйте:
    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 10 цифр (в секундах). Для преобразования секунд до даты используйте:
    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    
9
ответ дан shubham 15 August 2018 в 21:57
поделиться

Используйте модуль datetime:

from datetime import datetime
ts = int("1284101485")

# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
875
ответ дан Steven Kryskalla 15 August 2018 в 21:57
поделиться
  • 1
    .fromtimestamp() может завершиться неудачно для прошлых дат, если местный часовой пояс имел другое смещение utc. Вам нужна историческая база данных часовых поясов, например, предоставляемая модулем pytz (или вашей ОС). Или просто работайте в UTC и используйте .utcfromtimestamp(). – jfs 23 November 2013 в 03:08
  • 2
    @ J.F.Sebastian Вы упомянули, что это может закончиться неудачей в нескольких комментариях - пожалуйста, не могли бы вы рассказать о том, почему это не удастся для прошлых дат / времен? (Судя по upvotes, многие люди согласны с вами и рассматривают это как прямое). Несомненно, любая временная метка unix имеет простую эквивалентную дату / время? – davidhood2 22 November 2016 в 10:16
  • 3
    @ davidhood2 возьмем систему, в которой python не имеет доступа к базе данных tz (Windows), установите свой часовой пояс в часовой пояс, который имел другое смещение UTC в прошлом (например, Европа / Москва), вызов fromtimestamp () с отметками времени из прошлого (2011-). Сравните результаты со значениями, вычисленными с помощью pytz. Если это неясно; задайте отдельный вопрос о переполнении стека. – jfs 22 November 2016 в 15:10
  • 4
  • 5
    Точка импорта - это временная метка в секундах с момента эпохи; если у вас миллисекунды, вам нужно разделить на 1000, как я только что узнал. – wordsforthewise 13 June 2017 в 18:28
0
ответ дан Rishabh Jhalani 5 September 2018 в 21:39
поделиться
Другие вопросы по тегам:

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