Changeset 1071


Ignore:
Timestamp:
31/05/06 13:29:52 (13 years ago)
Author:
domlowe
Message:

now using cdtime for time conversion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/Scanner/csmllibs/csmltime.py

    r1069 r1071  
    1414import datetime 
    1515import sys 
     16import cdtime 
    1617 
    1718def createRefsys(csmldoc, dataset_element): 
     
    6162        return csmldoc, dataset_element 
    6263 
    63  
    64 def udunitsTime(daysSince, referenceDate): 
    65         #************************************************************************************** 
    66         #Creates UD Units compliant time/date strings from days/hours since and referenceDate/time 
    67         #************************************************************************************** 
    68          
    69                  
    70         #**************TDOO needs to be able to handle 'hours since'******** 
    71         #print "TIME" 
    72         #print daysSince 
    73         #print referenceDate 
    74         try: 
    75         #takes days since & reference date and returns time in 1991-09-01 00:00:00 format 
    76                 refYear =int(referenceDate[0:4]) 
    77                 refMonth =int( referenceDate[5:7]) 
    78                 refDay = int(referenceDate[8:10]) 
    79                 refTime = referenceDate [-8:] 
    80                 now = datetime.date(refYear,refMonth, refDay) 
    81                 difference = datetime.timedelta(days=daysSince) 
    82          
    83                 newDateTime = now+difference 
    84         #add the hrs mins seconds back in. 
    85                 newDateTime = str(newDateTime) + 'T' + refTime 
    86         except ValueError: 
    87                 #for now, just return the inputs. 
    88                 newDateTime = str(daysSince) + ' ' + (referenceDate) 
    89         return newDateTime 
    90          
    91          
    92 # def getTimePositionList(directory): 
    93 #       #obselete. I think.. 
    94 #       #create the values list for the TimePositionList list element. 
    95 #        
    96 #       files=index(directory,0) 
    97 #       tpl ="" 
    98 #        
    99 #       DI=csmllibs.csmldataiface.DataInterface() 
    100 #       #grab any (first) file                   
    101 #       DI=DI.getUnknownInterfaceType(files[0]) 
    102 #       DI.openFile(files[0]) 
    103 #       #fileobj=cdms.open( files[0] ) 
    104 #       #get the reference date for the time reference system. 
    105 #       #var = fileobj[timedimension] 
    106 #       DI.setVariable[timedimension] 
    107 #       #TO DO ERROR: if this line errors it's probably that user hasn't specified time dimension (-t) 
    108 #       refTime=DI.getVariableAttribute('units') 
    109 #       #print "REFTIME" 
    110 #       #print refTime 
    111 #       #refTime = getattr(var,'units') 
    112 #       #remove characters:  'days since' 
    113 #       #To do, hours since.....! 
    114 #       refTime = refTime[11:len(refTime)] 
    115 #       fileobj.close() 
    116 #        
    117 #       #print "no of files" + str(len(files)) 
    118 #       #for i in range(0, len(files)):  
    119 #       #if no. of files is great use wildcard, else use names 
    120 #       #IMPORTANT - do files open in right order...????!?? 
    121 #       #print "lenfiles:"  
    122 #       #print len(files) 
    123 #       for i in range(0, len(files)): 
    124 #                
    125 #               DI.openFile(files[i]) 
    126 #               DI.setVariable(timedimension) 
    127 #               data =getDataForVar() 
    128 #               print files[i] 
    129 #               print "TIME STRING:" + str(data) 
    130 #                
    131 #               #fileobj=cdms.open( files[i] ) 
    132 #               #var = fileobj[timedimension] 
    133 #               #data = var.getValue() 
    134 #               for j in range(0, len(data)): 
    135 #                       timevalue = udunitsTime(data[j], refTime) 
    136 #                       tpl = tpl + ' ' + str(timevalue) 
    137 #                       #fileobj.close() 
    138 #               DI.closeFile() 
    139 #               if i % 10 == 0: 
    140 #                       print i 
    141 #       return tpl 
    142                  
     64def CSMLtimeToUDtime(time): 
     65        #time string manipulation  - convert  2783-5-22T0:0:0.0 to 2783-5-22 0:0:0.0  
     66    return str(time).replace ('T', ' ') 
     67 
     68def UDtimeToCSMLtime(time): 
     69    #time string manipulation  - convert 2783-5-22 0:0:0.0 to 2783-5-22T0:0:0.0 
     70    return str(time).replace (' ', 'T') 
     71                 
    14372def getFileTimeList(filelist, timedim): 
     73     
     74        #**************************************************************************************** 
     75        #Given a list of files and a name for the time dimension this function will return a list containing 
     76        # filename/time pairs eg tuple [(ta,fa),(tb,fb),(tc,fc)] in the correct temporal order. 
     77        #if files contain more than one time, then the tuple will be of the form: 
     78        #[(ta1,ta2,ta3,fa),(tb1,tb2,tb3,fb),(tc1,tc2,tc3,fc)] 
     79        #***************************************************************************************** 
     80        FileTimeList = [] 
     81        print "len of filelist = " + str(len(filelist)) 
     82        DI=csmllibs.csmldataiface.DataInterface() 
     83        #grab any (first) file                   
     84         
     85        DI=DI.getUnknownInterfaceType(filelist[0]) 
     86        for i in range(0,len(filelist)): 
     87                DI.openFile(filelist[i]) 
     88                try: 
     89                        DI.setAxis(timedim) 
     90                except: 
     91                        print "Could not set time axis" 
     92                        print "check you have the correct time axis (-t) set" 
     93                        sys.exit() 
     94                data =DI.getDataForAxis() 
     95                times=[] 
     96                for j in range(0,len(data)): 
     97                        times.append(data[j]) 
     98                ftTuple = (times, filelist[i]) 
     99                FileTimeList.append(ftTuple) 
     100                DI.closeFile() 
     101                if i % 20 == 0: 
     102                        print i 
     103        FileTimeList.sort() 
     104        DI.openFile(filelist[i]) 
     105        #get the reference date for the time reference system. 
     106        DI.setAxis(timedim) 
     107        refTime=DI.getTimeUnits() 
     108        FormattedFileTimeList = [] 
     109        for j in range (0,len(FileTimeList)): 
     110                timeList = FileTimeList[j][0] 
     111                #print 'timelist_____________________' +str(timeList) 
     112                for k in range(0, len(timeList)): 
     113                        relativetime= cdtime.reltime(timeList[k], refTime) 
     114                        uduTime=UDtimeToCSMLtime(relativetime.tocomp()) 
     115                        ftTuple = (uduTime, filelist[j]) 
     116                        FormattedFileTimeList.append(ftTuple) 
     117        return FormattedFileTimeList     
     118 
     119def OLDgetFileTimeList(filelist, timedim): 
    144120         
    145121        #**************************************************************************************** 
     
    213189                        FormattedFileTimeList.append(ftTuple) 
    214190        return FormattedFileTimeList     
    215  
    216  
     191                 
    217192def GetOriginPosition(timestr): 
    218193                        #given a " messy" timestring eg ,Sample Time in elapsed UTs from 0hrs on 08-AUG-02, try to get the date info. 
Note: See TracChangeset for help on using the changeset viewer.