how to convert list of dates into Unix timestamps

Question:

I have a list of dates that has unordered length and with day,mon,year pattern.and i want to return both ordered date and date with utc format.

what i have tried:

 from datetime import timezone
 import datetime

 data_lst = ['07 17', '01 2017', '05 2015', '2016', '7 04 1988']
 utc = []
 standard_date = []
 for i in data_lst:
    if i:
        data = i.split()
        if len(data) == 3:
            date = f'{data[0]}/{data[1]}/{data[2]}'
        if len(data) == 2:
            date = f'01/{data[0]}/{data[1]}'
        if len(data) == 1:
            date = f'01/01/{data[0]}'
        standard_date.append(date)
        d_m_y = date.split('/')
        if len(d_m_y[2]) == 2:
            d_m_y[2] = '20' + d_m_y[2]
        date = datetime.datetime  # i stuck here

what i got so far,

 print(standard_date)
 >>> ['01/07/17', '01/01/2017', '01/05/2015', '01/01/2016', '7/04/1988']
 

but my expected result:

 print(standard_date)
 print(utc)
 >>> ['01/07/17', '01/01/2017', '01/05/2015', '01/01/2016', '7/04/1988']
 >>> ['1498867....', '148322...', 'utc timestamp(01/05/2015)',and so on]

i got stuck in line 20.

Asked By: Ramesh

||

Answers:

from datetime import datetime
import pytz
dates = ['07 17', '01 2017', '05 2015', '2016', '7 04 1988']
unix_list = []
def try_parsing_date(text):
    for fmt in ('%m %y', '%m %Y', '%Y', '%y', '%d %m %y', '%d %m %Y'):
        try:
            return datetime.strptime(text, fmt)
        except ValueError:
            pass
    raise ValueError('no valid date format found')


for date in dates:
    date = try_parsing_date(date)
    london_tz = pytz.timezone('Europe/London')
    date = london_tz.localize(date)
    utc_dt = date.astimezone(tz=pytz.utc)
    date_unix_tuple_list.append((date.strftime("%d/%m/%y"), int(utc_dt.timestamp())))
    date_unix_tuple_list.sort(key=lambda x: x[1]) # this line sorts the dates 
standard_date = list(map(lambda x: x[0], date_unix_tuple_list))
utc = list(map(lambda x: x[1], date_unix_tuple_list))
print(standard_date)
print(utc)

This will output

['07/04/88', '01/05/15', '01/01/16', '01/01/17', '01/07/17']
[576374460, 1430438460, 1451606460, 1483228860, 1498867260]

You will also need to change ‘Europe/London’ to your timezone
To reverse the list, change the sorting line to

  date_unix_tuple_list.sort(key=lambda x: x[1], reverse=True)
Answered By: Harvey9111
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.