@@ -670,7 +670,7 @@ def get_datetime(date: str, time: str, *, microseconds: bool = True) -> str:
670
670
return datetime_str
671
671
672
672
673
- def strptime_micr (date_string : str , fmt : str ) -> datetime :
673
+ def strptime_micr (date_string : str , fmt : str ) -> datetime . datetime :
674
674
r"""
675
675
Decorate strptime while supporting optional [.%f] in the format at the end
676
676
@@ -691,15 +691,20 @@ def strptime_micr(date_string: str, fmt: str) -> datetime:
691
691
return datetime .datetime .strptime (date_string , fmt )
692
692
693
693
694
- def datetime_utc_offset (datetime_obj : datetime , utc_offset : str ):
694
+ def datetime_utc_offset (datetime_obj : datetime . datetime , utc_offset : str ) -> datetime . datetime :
695
695
"""set the datetime's tzinfo by parsing an utc offset string"""
696
- sign , hours , minutes = re .match (r"([+\-]?)(\d{2})(\d{2})" , utc_offset ).groups ()
696
+ # https://dicom.innolitics.com/ciods/electromyogram/sop-common/00080201
697
+ extract_offset = re .match (r"([+\-]?)(\d{2})(\d{2})" , utc_offset )
698
+ if extract_offset is None :
699
+ raise ValueError (f"utc offset { utc_offset } is not valid" )
700
+ sign , hours , minutes = extract_offset .groups ()
697
701
sign = - 1 if sign == '-' else 1
698
702
hours , minutes = int (hours ), int (minutes )
699
703
tzinfo = datetime .timezone (sign * datetime .timedelta (hours = hours , minutes = minutes ))
700
704
return datetime_obj .replace (tzinfo = tzinfo )
701
705
702
- def strptime (datetime_string : str , fmts : list [str ]) -> datetime :
706
+
707
+ def strptime (datetime_string : str , fmts : list [str ]) -> datetime .datetime :
703
708
r"""
704
709
Try datetime.strptime on a list of formats returning the first successful attempt.
705
710
@@ -718,7 +723,8 @@ def strptime(datetime_string: str, fmts: list[str]) -> datetime:
718
723
pass
719
724
raise ValueError (f"Unable to parse datetime string: { datetime_str } " )
720
725
721
- def strptime_bids (datetime_string : str ) -> datetime :
726
+
727
+ def strptime_bids (datetime_string : str ) -> datetime .datetime :
722
728
r"""
723
729
Create a datetime object from a bids datetime string.
724
730
@@ -732,7 +738,8 @@ def strptime_bids(datetime_string: str) -> datetime:
732
738
datetime_obj = strptime (datetime_string , fmts )
733
739
return datetime_obj
734
740
735
- def strptime_dcm_da_tm (dcm_data : dcm .Dataset , da_tag : TagType , tm_tag : TagType ) -> datetime :
741
+
742
+ def strptime_dcm_da_tm (dcm_data : dcm .Dataset , da_tag : TagType , tm_tag : TagType ) -> datetime .datetime :
736
743
r"""
737
744
Create a datetime object from a dicom DA tag and TM tag.
738
745
@@ -756,12 +763,13 @@ def strptime_dcm_da_tm(dcm_data: dcm.Dataset, da_tag: TagType, tm_tag: TagType)
756
763
757
764
datetime_obj = datetime .datetime .combine (date .date (), time .time ())
758
765
759
- if utc_offset_dcm := dcm_data .get ([ 0x0008 , 0x0201 ] ):
766
+ if utc_offset_dcm := dcm_data .get (( 0x0008 , 0x0201 ) ):
760
767
utc_offset = utc_offset_dcm .value .strip ()
761
768
datetime_obj = datetime_utc_offset (datetime_obj , utc_offset ) if utc_offset else datetime_obj
762
769
return datetime_obj
763
770
764
- def strptime_dcm_dt (dcm_data : dcm .Dataset , dt_tag : TagType ) -> datetime :
771
+
772
+ def strptime_dcm_dt (dcm_data : dcm .Dataset , dt_tag : TagType ) -> datetime .datetime :
765
773
r"""
766
774
Create a datetime object from a dicom DT tag.
767
775
@@ -779,13 +787,13 @@ def strptime_dcm_dt(dcm_data: dcm.Dataset, dt_tag: TagType) -> datetime:
779
787
"%Y" , "%Y%m" , "%Y%m%d" , "%Y%m%d%H" , "%Y%m%d%H%M" , "%Y%m%d%H%M%S" , "%Y%m%d%H%M%S.%f" ]
780
788
datetime_obj = strptime (datetime_str , fmts )
781
789
782
- if utc_offset_dcm := dcm_data .get ([ 0x0008 , 0x0201 ] ):
790
+ if utc_offset_dcm := dcm_data .get (( 0x0008 , 0x0201 ) ):
783
791
if utc_offset := utc_offset_dcm .value .strip ():
784
- datetime_obj2 = datetime_utc_offset (datetime_obj , utc_offset )
785
- if datetime_obj .tzinfo and datetime_obj2 != datetime_obj :
786
- lgr .warning ("Unexpectedly previously parsed datetime %s contains zoneinfo which is different from the one obtained from DICOMs UTFOffset field: %s" , datetime_obj , datetime_obj2 )
787
- else :
788
- datetime_obj = datetime_obj2
792
+ datetime_obj2 = datetime_utc_offset (datetime_obj , utc_offset )
793
+ if datetime_obj .tzinfo and datetime_obj2 != datetime_obj :
794
+ lgr .warning ("Unexpectedly previously parsed datetime %s contains zoneinfo which is different from the one obtained from DICOMs UTFOffset field: %s" , datetime_obj , datetime_obj2 )
795
+ else :
796
+ datetime_obj = datetime_obj2
789
797
return datetime_obj
790
798
791
799
0 commit comments