Skip to content

Commit 60b0aeb

Browse files
authored
Changes to CopyToPosixTimestampWithFractionOfSecond (#291)
1 parent da1d05b commit 60b0aeb

7 files changed

Lines changed: 56 additions & 13 deletions

File tree

config/dpkg/changelog

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
dfdatetime (20250730-1) unstable; urgency=low
1+
dfdatetime (20251018-1) unstable; urgency=low
22

33
* Auto-generated
44

5-
-- Log2Timeline maintainers <log2timeline-maintainers@googlegroups.com> Wed, 30 Jul 2025 06:54:50 +0200
5+
-- Log2Timeline maintainers <log2timeline-maintainers@googlegroups.com> Sat, 18 Oct 2025 13:07:39 +0200

dfdatetime/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@
2525
from dfdatetime import webkit_time
2626

2727

28-
__version__ = '20250730'
28+
__version__ = '20251018'

dfdatetime/interface.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -898,10 +898,12 @@ def CopyToPosixTimestampWithFractionOfSecond(self):
898898
return None, None
899899

900900
remainder_multiplier = self._REMAINDER_MULTIPLIER.get(self._precision, None)
901-
if remainder_multiplier:
901+
if not remainder_multiplier:
902+
remainder = None
903+
elif normalized_timestamp >= 0:
902904
remainder = int((normalized_timestamp % 1) * remainder_multiplier)
903905
else:
904-
remainder = None
906+
remainder = int((normalized_timestamp % 1) * -remainder_multiplier)
905907

906908
return int(normalized_timestamp), remainder
907909

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = dfdatetime
3-
version = 20251014
3+
version = 20251018
44
description = Digital Forensics date and time (dfDateTime).
55
long_description = dfDateTime, or Digital Forensics date and time, provides date and time objects to preserve accuracy and precision.
66
long_description_content_type = text/plain

tests/fat_date_time.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,20 +250,20 @@ def testCopyToDateTimeStringISO8601(self):
250250
date_time_string = fat_timestamp_object.CopyToDateTimeStringISO8601()
251251
self.assertEqual(date_time_string, '2021-07-09T22:11:30.24+00:00')
252252

253-
def testCopyToFATTimestampstampWithFractionOfSecond(self):
253+
def testCopyToPosixTimestampWithFractionOfSecond(self):
254254
"""Tests the CopyToPosixTimestampWithFractionOfSecond function."""
255255
fat_timestamp_object = fat_date_time.FATTimestamp(timestamp=131033589024)
256256

257-
fat_timestamp, fraction_of_second = (
257+
posix_timestamp, fraction_of_second = (
258258
fat_timestamp_object.CopyToPosixTimestampWithFractionOfSecond())
259-
self.assertEqual(fat_timestamp, 1625868690)
259+
self.assertEqual(posix_timestamp, 1625868690)
260260
self.assertEqual(fraction_of_second, 24)
261261

262262
fat_timestamp_object = fat_date_time.FATTimestamp()
263263

264-
fat_timestamp, fraction_of_second = (
264+
posix_timestamp, fraction_of_second = (
265265
fat_timestamp_object.CopyToPosixTimestampWithFractionOfSecond())
266-
self.assertIsNone(fat_timestamp)
266+
self.assertIsNone(posix_timestamp)
267267
self.assertIsNone(fraction_of_second)
268268

269269
def testGetDate(self):

tests/filetime.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,17 @@ def testGetNormalizedTimestamp(self):
4949
normalized_timestamp = filetime_object._GetNormalizedTimestamp()
5050
self.assertEqual(normalized_timestamp, decimal.Decimal('1281643591.546875'))
5151

52+
filetime_object = filetime.Filetime(timestamp=0x0000000000000000)
53+
54+
normalized_timestamp = filetime_object._GetNormalizedTimestamp()
55+
self.assertEqual(normalized_timestamp, decimal.Decimal('-11644473600.0'))
56+
57+
filetime_object = filetime.Filetime(timestamp=0x0000000000008000)
58+
59+
normalized_timestamp = filetime_object._GetNormalizedTimestamp()
60+
self.assertEqual(
61+
normalized_timestamp, decimal.Decimal('-11644473599.9967232'))
62+
5263
filetime_object = filetime.Filetime(timestamp=0x1ffffffffffffffff)
5364

5465
normalized_timestamp = filetime_object._GetNormalizedTimestamp()
@@ -109,6 +120,36 @@ def testCopyToDateTimeStringISO8601(self):
109120
date_time_string = filetime_object.CopyToDateTimeStringISO8601()
110121
self.assertEqual(date_time_string, '2010-08-12T21:06:31.5468750+00:00')
111122

123+
def testCopyToPosixTimestampWithFractionOfSecond(self):
124+
"""Tests the CopyToPosixTimestampWithFractionOfSecond function."""
125+
filetime_object = filetime.Filetime(timestamp=0x01cb3a623d0a17ce)
126+
127+
posix_timestamp, fraction_of_second = (
128+
filetime_object.CopyToPosixTimestampWithFractionOfSecond())
129+
self.assertEqual(posix_timestamp, 1281647191)
130+
self.assertEqual(fraction_of_second, 5468750)
131+
132+
filetime_object = filetime.Filetime(timestamp=0x0000000000000000)
133+
134+
posix_timestamp, fraction_of_second = (
135+
filetime_object.CopyToPosixTimestampWithFractionOfSecond())
136+
self.assertEqual(posix_timestamp, -11644473600)
137+
self.assertEqual(fraction_of_second, 0)
138+
139+
filetime_object = filetime.Filetime(timestamp=0x0000000000008000)
140+
141+
posix_timestamp, fraction_of_second = (
142+
filetime_object.CopyToPosixTimestampWithFractionOfSecond())
143+
self.assertEqual(posix_timestamp, -11644473599)
144+
self.assertEqual(fraction_of_second, 9967232)
145+
146+
filetime_object = filetime.Filetime()
147+
148+
posix_timestamp, fraction_of_second = (
149+
filetime_object.CopyToPosixTimestampWithFractionOfSecond())
150+
self.assertIsNone(posix_timestamp)
151+
self.assertIsNone(fraction_of_second)
152+
112153
def testGetDate(self):
113154
"""Tests the GetDate function."""
114155
filetime_object = filetime.Filetime(timestamp=0x01cb3a623d0a17ce)

tests/posix_time.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def testCopyToPosixTimestampWithFractionOfSecond(self):
280280
posix_timestamp, fraction_of_second = (
281281
posix_time_object.CopyToPosixTimestampWithFractionOfSecond())
282282
self.assertEqual(posix_timestamp, -11644468446)
283-
self.assertEqual(fraction_of_second, -327)
283+
self.assertEqual(fraction_of_second, 327)
284284

285285
posix_time_object = posix_time.PosixTime()
286286

@@ -443,7 +443,7 @@ def testCopyToPosixTimestampWithFractionOfSecond(self):
443443
posix_timestamp, fraction_of_second = (
444444
posix_time_object.CopyToPosixTimestampWithFractionOfSecond())
445445
self.assertEqual(posix_timestamp, -11644468446)
446-
self.assertEqual(fraction_of_second, -327447)
446+
self.assertEqual(fraction_of_second, 327447)
447447

448448
posix_time_object = posix_time.PosixTime()
449449

0 commit comments

Comments
 (0)