@@ -801,10 +801,10 @@ def test_datetime_strrepr():
801801@pytest .mark .skipif (sys .maxsize <= 2 ** 32 , reason = "requires 64-bit arch" )
802802def test_datetime_numrepr ():
803803 data = {
804- dt .datetime .fromtimestamp (0 ),
805- dt .datetime .fromtimestamp (1 ),
806- dt .datetime .fromtimestamp (86400 ),
807- dt .datetime .fromtimestamp (100000 ),
804+ dt .datetime .utcfromtimestamp (0 ),
805+ dt .datetime .utcfromtimestamp (1 ),
806+ dt .datetime .utcfromtimestamp (86400 ),
807+ dt .datetime .utcfromtimestamp (100000 ),
808808 }
809809 numbers = Int (Counter (d .timestamp () for d in data ))
810810 pattern = DateTime .from_numbers (numbers )
@@ -818,13 +818,34 @@ def test_datetime_numrepr():
818818 pattern .validate (2000000000000 )
819819
820820
821+ @pytest .mark .skipif (sys .maxsize <= 2 ** 32 , reason = "requires 64-bit arch" )
822+ def test_datetime_numrepr_epoch ():
823+ excel_epoch = dt .datetime (1899 , 12 , 30 )
824+ offset = (dt .datetime .utcfromtimestamp (0 ) - excel_epoch ).total_seconds () // 86400
825+ data = {
826+ dt .datetime (1943 , 7 , 20 ),
827+ dt .datetime (1970 , 1 , 1 ),
828+ dt .datetime (1976 , 1 , 1 ),
829+ }
830+ numbers = Int (Counter (d .timestamp () + offset for d in data ))
831+ pattern = DateTime .from_numbers (numbers , epoch = excel_epoch )
832+ assert pattern == NumRepr (DateTime (Counter (data )), pattern = Int )
833+ pattern .validate (1000 )
834+ with pytest .raises (TypeError ):
835+ pattern .validate ('1000' )
836+ with pytest .raises (ValueError ):
837+ pattern .validate (1200000 )
838+ with pytest .raises (ValueError ):
839+ pattern .validate (2000000000000 )
840+
841+
821842@pytest .mark .skipif (sys .maxsize <= 2 ** 32 , reason = "requires 64-bit arch" )
822843def test_datetime_strrepr_numrepr ():
823844 data = {
824- dt .datetime .fromtimestamp (0 ),
825- dt .datetime .fromtimestamp (1 ),
826- dt .datetime .fromtimestamp (86400 ),
827- dt .datetime .fromtimestamp (100000 ),
845+ dt .datetime .utcfromtimestamp (0 ),
846+ dt .datetime .utcfromtimestamp (1 ),
847+ dt .datetime .utcfromtimestamp (86400 ),
848+ dt .datetime .utcfromtimestamp (100000 ),
828849 }
829850 numbers = StrRepr (Int (Counter (d .timestamp () for d in data )), pattern = 'd' )
830851 pattern = DateTime .from_numbers (numbers )
@@ -903,10 +924,10 @@ def test_strrepr_add():
903924
904925def test_numrepr_add ():
905926 data = {
906- dt .datetime .fromtimestamp (0 ),
907- dt .datetime .fromtimestamp (1 ),
908- dt .datetime .fromtimestamp (86400 ),
909- dt .datetime .fromtimestamp (100000 ),
927+ dt .datetime .utcfromtimestamp (0 ),
928+ dt .datetime .utcfromtimestamp (1 ),
929+ dt .datetime .utcfromtimestamp (86400 ),
930+ dt .datetime .utcfromtimestamp (100000 ),
910931 }
911932 numbers = Int (Counter (d .timestamp () for d in data ))
912933 int_pattern = DateTime .from_numbers (numbers )
0 commit comments