@@ -178,10 +178,13 @@ class BaseRecord(object):
178
178
The counter used at the start of the file.
179
179
sig_len : int, optional
180
180
The total length of the signal.
181
- base_time : str, optional
182
- A string of the record's start time in 24h 'HH:MM:SS(.ms)' format.
183
- base_date : str, optional
184
- A string of the record's start date in 'DD/MM/YYYY' format.
181
+ base_time : datetime.time, optional
182
+ The time of day at the beginning of the record.
183
+ base_date : datetime.date, optional
184
+ The date at the beginning of the record.
185
+ base_datetime : datetime.datetime, optional
186
+ The date and time at the beginning of the record, equivalent to
187
+ `datetime.combine(base_date, base_time)`.
185
188
comments : list, optional
186
189
A list of string comments to be written to the header file.
187
190
sig_name : str, optional
@@ -200,6 +203,7 @@ def __init__(
200
203
sig_len = None ,
201
204
base_time = None ,
202
205
base_date = None ,
206
+ base_datetime = None ,
203
207
comments = None ,
204
208
sig_name = None ,
205
209
):
@@ -209,11 +213,42 @@ def __init__(
209
213
self .counter_freq = counter_freq
210
214
self .base_counter = base_counter
211
215
self .sig_len = sig_len
212
- self .base_time = base_time
213
- self .base_date = base_date
216
+ if base_datetime is not None :
217
+ if base_time is not None :
218
+ raise TypeError (
219
+ "cannot specify both base_time and base_datetime"
220
+ )
221
+ if base_date is not None :
222
+ raise TypeError (
223
+ "cannot specify both base_date and base_datetime"
224
+ )
225
+ self .base_datetime = base_datetime
226
+ else :
227
+ self .base_time = base_time
228
+ self .base_date = base_date
214
229
self .comments = comments
215
230
self .sig_name = sig_name
216
231
232
+ @property
233
+ def base_datetime (self ):
234
+ if self .base_date is None or self .base_time is None :
235
+ return None
236
+ else :
237
+ return datetime .datetime .combine (
238
+ date = self .base_date , time = self .base_time
239
+ )
240
+
241
+ @base_datetime .setter
242
+ def base_datetime (self , value ):
243
+ if value is None :
244
+ self .base_date = None
245
+ self .base_time = None
246
+ elif isinstance (value , datetime .datetime ) and value .tzinfo is None :
247
+ self .base_date = value .date ()
248
+ self .base_time = value .time ()
249
+ else :
250
+ raise TypeError (f"invalid base_datetime value: { value !r} " )
251
+
217
252
def check_field (self , field , required_channels = "all" ):
218
253
"""
219
254
Check whether a single field is valid in its basic form. Does
@@ -525,12 +560,7 @@ def _adjust_datetime(self, sampfrom):
525
560
if sampfrom :
526
561
dt_seconds = sampfrom / self .fs
527
562
if self .base_date and self .base_time :
528
- self .base_datetime = datetime .datetime .combine (
529
- self .base_date , self .base_time
530
- )
531
563
self .base_datetime += datetime .timedelta (seconds = dt_seconds )
532
- self .base_date = self .base_datetime .date ()
533
- self .base_time = self .base_datetime .time ()
534
564
# We can calculate the time even if there is no date
535
565
elif self .base_time :
536
566
tmp_datetime = datetime .datetime .combine (
@@ -596,10 +626,13 @@ class Record(BaseRecord, _header.HeaderMixin, _signal.SignalMixin):
596
626
The counter used at the start of the file.
597
627
sig_len : int, optional
598
628
The total length of the signal.
599
- base_time : str, optional
600
- A string of the record's start time in 24h 'HH:MM:SS(.ms)' format.
601
- base_date : str, optional
602
- A string of the record's start date in 'DD/MM/YYYY' format.
629
+ base_time : datetime.time, optional
630
+ The time of day at the beginning of the record.
631
+ base_date : datetime.date, optional
632
+ The date at the beginning of the record.
633
+ base_datetime : datetime.datetime, optional
634
+ The date and time at the beginning of the record, equivalent to
635
+ `datetime.combine(base_date, base_time)`.
603
636
file_name : str, optional
604
637
The name of the file used for analysis.
605
638
fmt : list, optional
@@ -656,6 +689,7 @@ def __init__(
656
689
sig_len = None ,
657
690
base_time = None ,
658
691
base_date = None ,
692
+ base_datetime = None ,
659
693
file_name = None ,
660
694
fmt = None ,
661
695
samps_per_frame = None ,
@@ -677,16 +711,17 @@ def __init__(
677
711
# have this field. Even n_seg = 1 makes the header a multi-segment
678
712
# header.
679
713
super (Record , self ).__init__ (
680
- record_name ,
681
- n_sig ,
682
- fs ,
683
- counter_freq ,
684
- base_counter ,
685
- sig_len ,
686
- base_time ,
687
- base_date ,
688
- comments ,
689
- sig_name ,
714
+ record_name = record_name ,
715
+ n_sig = n_sig ,
716
+ fs = fs ,
717
+ counter_freq = counter_freq ,
718
+ base_counter = base_counter ,
719
+ sig_len = sig_len ,
720
+ base_time = base_time ,
721
+ base_date = base_date ,
722
+ base_datetime = base_datetime ,
723
+ comments = comments ,
724
+ sig_name = sig_name ,
690
725
)
691
726
692
727
self .p_signal = p_signal
@@ -896,10 +931,13 @@ class MultiRecord(BaseRecord, _header.MultiHeaderMixin):
896
931
The counter used at the start of the file.
897
932
sig_len : int, optional
898
933
The total length of the signal.
899
- base_time : str, optional
900
- A string of the record's start time in 24h 'HH:MM:SS(.ms)' format.
901
- base_date : str, optional
902
- A string of the record's start date in 'DD/MM/YYYY' format.
934
+ base_time : datetime.time, optional
935
+ The time of day at the beginning of the record.
936
+ base_date : datetime.date, optional
937
+ The date at the beginning of the record.
938
+ base_datetime : datetime.datetime, optional
939
+ The date and time at the beginning of the record, equivalent to
940
+ `datetime.combine(base_date, base_time)`.
903
941
seg_name : str, optional
904
942
The name of the segment.
905
943
seg_len : int, optional
@@ -938,6 +976,7 @@ def __init__(
938
976
sig_len = None ,
939
977
base_time = None ,
940
978
base_date = None ,
979
+ base_datetime = None ,
941
980
seg_name = None ,
942
981
seg_len = None ,
943
982
comments = None ,
@@ -946,16 +985,17 @@ def __init__(
946
985
):
947
986
948
987
super (MultiRecord , self ).__init__ (
949
- record_name ,
950
- n_sig ,
951
- fs ,
952
- counter_freq ,
953
- base_counter ,
954
- sig_len ,
955
- base_time ,
956
- base_date ,
957
- comments ,
958
- sig_name ,
988
+ record_name = record_name ,
989
+ n_sig = n_sig ,
990
+ fs = fs ,
991
+ counter_freq = counter_freq ,
992
+ base_counter = base_counter ,
993
+ sig_len = sig_len ,
994
+ base_time = base_time ,
995
+ base_date = base_date ,
996
+ base_datetime = base_datetime ,
997
+ comments = comments ,
998
+ sig_name = sig_name ,
959
999
)
960
1000
961
1001
self .layout = layout
@@ -2631,6 +2671,7 @@ def wrsamp(
2631
2671
comments = None ,
2632
2672
base_time = None ,
2633
2673
base_date = None ,
2674
+ base_datetime = None ,
2634
2675
write_dir = "" ,
2635
2676
):
2636
2677
"""
@@ -2674,10 +2715,13 @@ def wrsamp(
2674
2715
A list of integers specifying the digital baseline.
2675
2716
comments : list, optional
2676
2717
A list of string comments to be written to the header file.
2677
- base_time : str, optional
2678
- A string of the record's start time in 24h 'HH:MM:SS(.ms)' format.
2679
- base_date : str, optional
2680
- A string of the record's start date in 'DD/MM/YYYY' format.
2718
+ base_time : datetime.time, optional
2719
+ The time of day at the beginning of the record.
2720
+ base_date : datetime.date, optional
2721
+ The date at the beginning of the record.
2722
+ base_datetime : datetime.datetime, optional
2723
+ The date and time at the beginning of the record, equivalent to
2724
+ setting both `base_date` and `base_time`.
2681
2725
write_dir : str, optional
2682
2726
The directory in which to write the files.
2683
2727
@@ -2735,6 +2779,7 @@ def wrsamp(
2735
2779
comments = comments ,
2736
2780
base_time = base_time ,
2737
2781
base_date = base_date ,
2782
+ base_datetime = base_datetime ,
2738
2783
)
2739
2784
# Compute optimal fields to store the digital signal, carry out adc,
2740
2785
# and set the fields.
@@ -2753,6 +2798,7 @@ def wrsamp(
2753
2798
comments = comments ,
2754
2799
base_time = base_time ,
2755
2800
base_date = base_date ,
2801
+ base_datetime = base_datetime ,
2756
2802
)
2757
2803
# Use d_signal to set the fields directly
2758
2804
record .set_d_features ()
0 commit comments