@@ -168,7 +168,7 @@ def get_file_dates(
168168 source_date_update : str = "git" ,
169169 meta_datetime_format : str = "%Y-%m-%d %H:%M" ,
170170 meta_default_timezone : str = "UTC" ,
171- meta_default_time : datetime = None ,
171+ meta_default_time : Optional [ datetime ] = None ,
172172 ) -> Tuple [datetime , datetime ]:
173173 """Extract creation and update dates from page metadata (yaml frontmatter) or
174174 git log for given file.
@@ -193,6 +193,8 @@ def get_file_dates(
193193 """
194194 # empty vars
195195 dt_created = dt_updated = None
196+ if meta_default_time is None :
197+ meta_default_time = self .meta_default_time = datetime .min
196198
197199 # if enabled, try to retrieve dates from page metadata
198200 if not self .use_git or (
@@ -416,14 +418,20 @@ def get_date_from_meta(
416418 try :
417419 if isinstance (date_metatag_value , str ):
418420 out_date = datetime .strptime (date_metatag_value , meta_datetime_format )
419- elif isinstance (date_metatag_value , (date , datetime )):
420- if isinstance (meta_default_time , datetime ):
421- time_to_add = meta_default_time .time ()
422- else :
423- time_to_add = datetime .min .time ()
424- out_date = datetime .combine (date_metatag_value , time_to_add )
421+ # datetime being a subclass of date, the following elif order matters
422+ # see: https://stackoverflow.com/a/68743663/2556577
423+ elif isinstance (date_metatag_value , datetime ):
424+ # if datetime, use it directly
425+ out_date = date_metatag_value
426+ elif isinstance (date_metatag_value , date ):
427+ out_date = datetime .combine (
428+ date = date_metatag_value , time = meta_default_time .time ()
429+ )
425430 else :
426- logger .debug (f"Incompatible date type: { type (date_metatag_value )} " )
431+ logger .info (
432+ f"Incompatible date type: { type (date_metatag_value )} . It must be: "
433+ "date, datetime or str (complying with defined strftime format)."
434+ )
427435 return out_date
428436 except ValueError as err :
429437 logger .error (
0 commit comments