@@ -31,6 +31,7 @@ def __init__(self, var_type, var_dict, initial_basetime, prefer_forecast=True):
3131 Defaults to True.
3232
3333 Raises:
34+ RuntimeError: Initial base time not set
3435 RuntimeError: No filepattern provided
3536 RuntimeError: variable must have attribute
3637 RuntimeError: You can not have larger offset than the frequency of forecasts
@@ -45,6 +46,8 @@ def __init__(self, var_type, var_dict, initial_basetime, prefer_forecast=True):
4546
4647 self .filepattern = self .substitute_macros (var_dict ["filepattern" ])
4748 self .initial_basetime = initial_basetime
49+ if self .initial_basetime is None :
50+ raise RuntimeError ("Initial base time not set" )
4851 try :
4952 self .fcint = int (self .var_dict ["fcint" ])
5053 except KeyError :
@@ -70,6 +73,16 @@ def __init__(self, var_type, var_dict, initial_basetime, prefer_forecast=True):
7073 + " > "
7174 + str (self .fcint )
7275 )
76+ # Calculate basetime offset based on initial basetime and fcint
77+ seconds_since_midnight = int (
78+ (
79+ self .initial_basetime
80+ - self .initial_basetime .replace (hour = 0 , minute = 0 , second = 0 , microsecond = 0 )
81+ ).total_seconds ()
82+ )
83+ if seconds_since_midnight == 86400 :
84+ seconds_since_midnight = 0
85+ self .basetime_offset = seconds_since_midnight % self .fcint
7386 accumulated , instant , file_var = self .set_var (validtime = self .initial_basetime )
7487 self .file_var = file_var
7588 self .instant = instant
@@ -559,11 +572,18 @@ def get_basetime(self, validtime, previoustime=None, allow_different_basetime=Fa
559572 logging .debug (" offset: %s" , self .offset )
560573 logging .debug (" initial_basetime: %s" , self .initial_basetime )
561574 logging .debug (" Basetime with offset: %s" , basetime )
575+ logging .info (" Basetime offset: %s" , self .basetime_offset )
562576
563577 # Modify based on fcint
564578 seconds_since_midnight = int (
565579 (
566- basetime - basetime .replace (hour = 0 , minute = 0 , second = 0 , microsecond = 0 )
580+ basetime
581+ - basetime .replace (
582+ hour = int (self .basetime_offset / 3600 ),
583+ minute = 0 ,
584+ second = 0 ,
585+ microsecond = 0 ,
586+ )
567587 ).total_seconds ()
568588 )
569589 if seconds_since_midnight == 86400 :
@@ -586,7 +606,9 @@ def get_basetime(self, validtime, previoustime=None, allow_different_basetime=Fa
586606
587607 fcint = as_timedelta (seconds = self .fcint )
588608 basetime = (
589- basetime .replace (hour = 0 , minute = 0 , second = 0 , microsecond = 0 )
609+ basetime .replace (
610+ hour = int (self .basetime_offset / 3600 ), minute = 0 , second = 0 , microsecond = 0
611+ )
590612 + (basetime_inc * fcint )
591613 - prefer_forecast
592614 )
0 commit comments