Это, очевидно, старый пост, но я нашел несколько способов сократить его. Также есть несколько конкретных чисел, чтобы сделать недействительными по этой ссылке: 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;
}
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)
Взято из http://seehuhn.de/pages/pdate
быстрый и грязный один вкладыш:
'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))
'2013-5-5-1-9-43'
Вы посмотрели пакет datetime? Я считаю, что у него есть метод fromUnixTimestamp.
Есть интересный способ, когда вам не нужно беспокоиться о часовых поясах, 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)
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
Для пользовательской метки времени из отметки времени UNIX я использовал это в сценариях до:
import os, datetime
datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")
Выход:
'26 декабря 2012 г.
.fromtimestamp()
и .strftime()
. Примечание: getmtime()
возвращает float уже.
– jfs
16 May 2015 в 13:00
Есть две части:
Портативный способ получить локальное время, которое работает, даже если местный часовой пояс имел другое смещение 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))
>>> 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'
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
я только что успешно использовал:
>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
Вы можете использовать easy_date , чтобы сделать его легким:
import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
strptime
и strftime
не интуитивно понятны ... И даже не читаемы ... Но я понимаю и уважаю ваше мнение
– Raphael Amoedo
9 December 2015 в 19:06
Самый проголосовавший ответ предлагает использовать fromtimestamp, который подвержен ошибкам, поскольку он использует локальный часовой пояс. Чтобы избежать проблем, лучше использовать UTC:
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
Где posix_time - это эпоха эпохи Posix, которую вы хотите преобразовать
Помимо использования пакета time / datetime, pandas также можно использовать для решения одной и той же проблемы. Вот как мы можем использовать pandas для преобразования метки времени в читаемую дату:
Временные метки могут быть в двух форматах:
import pandas
result_ms=pandas.to_datetime('1493530261000',unit='ms')
str(result_ms)
Output: '2017-04-30 05:31:01'
import pandas
result_s=pandas.to_datetime('1493530261',unit='s')
str(result_s)
Output: '2017-04-30 05:31:01'
Используйте модуль 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'))
.fromtimestamp()
может завершиться неудачно для прошлых дат, если местный часовой пояс имел другое смещение utc. Вам нужна историческая база данных часовых поясов, например, предоставляемая модулем pytz
(или вашей ОС). Или просто работайте в UTC и используйте .utcfromtimestamp()
.
– jfs
23 November 2013 в 03:08
pytz
. Если это неясно; задайте отдельный вопрос о переполнении стека.
– jfs
22 November 2016 в 15:10
pytz
.
– jfs
23 November 2016 в 17:31