finally fix the DST handling properly using pytz
This commit is contained in:
		
							parent
							
								
									5721b5b23c
								
							
						
					
					
						commit
						792a2aec4f
					
				| 
						 | 
				
			
			@ -26,8 +26,11 @@ import codecs
 | 
			
		|||
from decimal import Decimal
 | 
			
		||||
import operator
 | 
			
		||||
from xml.dom.minidom import Node
 | 
			
		||||
 | 
			
		||||
import time
 | 
			
		||||
import datetime
 | 
			
		||||
from pytz import timezone
 | 
			
		||||
import pytz
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
# logging has been set up in fpdb.py or HUD_main.py, use their settings:
 | 
			
		||||
| 
						 | 
				
			
			@ -497,23 +500,24 @@ or None if we fail to get the info """
 | 
			
		|||
        
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def changeTimezone(time, givenTimezone, wantedTimezone):
 | 
			
		||||
        offest = datetime.timedelta(hours=0)
 | 
			
		||||
        if givenTimezone=="ET" and wantedTimezone=="UTC":
 | 
			
		||||
            # approximate rules for ET daylight savings time:
 | 
			
		||||
            if (   time.month == 12                                  # all of Dec
 | 
			
		||||
                or (time.month == 11 and time.day > 4)     #    and most of November
 | 
			
		||||
                or time.month < 3                                    #    and all of Jan/Feb
 | 
			
		||||
                or (time.month == 3 and time.day < 11) ):  #    and 1st 10 days of March
 | 
			
		||||
                offset = datetime.timedelta(hours=5)       # are EST: assume 5 hour offset (ET without daylight saving)
 | 
			
		||||
            else:
 | 
			
		||||
                offset = datetime.timedelta(hours=4)       # rest is EDT: assume 4 hour offset (ET with daylight saving)
 | 
			
		||||
            #print "   tz = %s  start = %s" % (tz, str(hand.starttime))
 | 
			
		||||
        elif givenTimezone=="CET" and wantedTimezone=="UTC":
 | 
			
		||||
            offset = datetime.timedelta(hours=1)
 | 
			
		||||
 | 
			
		||||
        # adjust time into UTC:
 | 
			
		||||
        time = time + offset
 | 
			
		||||
        return time
 | 
			
		||||
        #print "raw time:",time, "given TZ:", givenTimezone
 | 
			
		||||
        if wantedTimezone=="UTC":
 | 
			
		||||
            wantedTimezone = pytz.utc
 | 
			
		||||
        else:
 | 
			
		||||
            raise Error #TODO raise appropriate error
 | 
			
		||||
        
 | 
			
		||||
        if givenTimezone=="ET":
 | 
			
		||||
            givenTimezone = timezone('US/Eastern')
 | 
			
		||||
        elif givenTimezone=="CET":
 | 
			
		||||
            givenTimezone = timezone('Europe/Berlin')
 | 
			
		||||
            #Note: Daylight Saving Time is standardised across the EU so this should be fine
 | 
			
		||||
        else:
 | 
			
		||||
            raise Error #TODO raise appropriate error
 | 
			
		||||
        
 | 
			
		||||
        localisedTime = givenTimezone.localize(time)
 | 
			
		||||
        utcTime = localisedTime.astimezone(wantedTimezone)
 | 
			
		||||
        #print "utcTime:",utcTime
 | 
			
		||||
        return utcTime
 | 
			
		||||
    #end @staticmethod def changeTimezone
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user