get the min date from a list

luofeiyu elearn2014 at gmail.com
Thu Aug 14 19:22:21 EDT 2014


I am glad to hear that it is no necessary to create a complicated my 
function to change the time string.
But in my computer the timezone offset  do not work for me.
I am in win7+python34.

 >>> import sys
 >>> sys.version
'3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit 
(AMD64)]'

 >>> import time
 >>> time.tzname
('China Standard Time', 'China Daylight Time')
 >>> time.strptime(t1,"%a, %d %b %Y %H:%M:%S %z")
time.struct_time(tm_year=2014, tm_mon=8, tm_mday=9, tm_hour=7, 
tm_min=36, tm_sec
=46, tm_wday=5, tm_yday=221, tm_isdst=-1)
 >>> time.strptime(t2,"%a, %d %b %Y %H:%M:%S %z")
time.struct_time(tm_year=2014, tm_mon=8, tm_mday=9, tm_hour=7, 
tm_min=36, tm_sec
=46, tm_wday=5, tm_yday=221, tm_isdst=-1)
 >>>

The %z does not work for me, how to adjust it my computer?


On 8/15/2014 1:24 AM, Ian Kelly wrote:
> On Thu, Aug 14, 2014 at 8:10 AM, luofeiyu <elearn2014 at gmail.com> wrote:
>> I finished it ,but how to make it into more pythonic way such as
>>
>> min (dates, key = converter)
> The converter will be your changeToUnix function, but you'll need to
> rework it to convert a single, rather than the whole list.
>
>> def  changeToUnix(times):
>>      import time,calendar,re
>>      time_list=[]
>>      for time1 in times:
>>          pat='(.+?)([-|+]\d{4})(\(?.*\)?)'
>>          x=re.search(pat,time1)
>>          time_part=x.groups()[0].strip()
>>          tz_part=x.groups()[1]
>>          tz_acc=x.groups()[2].strip().replace('(','').replace(')','')
>>          num=int(tz_part[1:3])
>>          if tz_acc in ["","UTC","CST","GMT","EST","CST","PST"]:   num=num
>>          if tz_acc in ["EDT"]:   num=num+2
>>          if tz_acc in ["CDT"]:   num=num+1
>>          if tz_acc in ["PDT"]:   num=num-1
>>          op=tz_part[0]
>>          y=time.strptime(time_part,"%a, %d %b %Y %H:%M:%S")
>>          if op=="-":    hour=int(y.tm_hour)-num
>>          if op=="+":    hour=int(y.tm_hour)+num
>>          time2=(y.tm_year,y.tm_mon,y.tm_mday,hour,y.tm_min,y.tm_sec)
>>          time_list.append(calendar.timegm(time2))
>>      return(time_list)
> This looks way overly complicated. Why are you trying to mess with the
> time zone offset? strptime has a %z format code for parsing that
> (although I would recommend using datetime.datetime.strptime since I'm
> not sure how well time.strptime supports it). By adding the offset to
> the hour like that, you could end up with an hour that falls outside
> the accepted range. And I think you have your addition and subtraction
> switched around anyway -- in effect you're doubling the time zone
> offset, not converting to UTC. Also you would be losing the minutes
> part of the time zone offset if you were to get something like +0545.
> I also don't understand why you're special-casing and modifying three
> of the time zones.
>
> All you need to do is strip the parenthesized timezone off the string
> if it's present, and pass the result to datetime.datetime.strptime.




More information about the Python-list mailing list