Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion dfdatetime/cocoa_time.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Cocoa timestamp implementation."""

import decimal
import math

from dfdatetime import definitions
from dfdatetime import factory
Expand Down Expand Up @@ -121,7 +122,7 @@ def CopyToDateTimeString(self):
return None

number_of_days, hours, minutes, seconds = self._GetTimeValues(
int(self._timestamp)
math.floor(self._timestamp)
)
year, month, day_of_month = self._GetDateValuesWithEpoch(
number_of_days, self._EPOCH
Expand Down
3 changes: 2 additions & 1 deletion dfdatetime/delphi_date_time.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Delphi TDateTime implementation."""

import decimal
import math

from dfdatetime import definitions
from dfdatetime import factory
Expand Down Expand Up @@ -129,7 +130,7 @@ def CopyToDateTimeString(self):
number_of_seconds = self._timestamp * definitions.SECONDS_PER_DAY

number_of_days, hours, minutes, seconds = self._GetTimeValues(
int(number_of_seconds)
math.floor(number_of_seconds)
)
# The maximum date supported by TDateTime values is limited to:
# 9999-12-31 23:59:59.999 (approximate 2958465 days since epoch).
Expand Down
3 changes: 2 additions & 1 deletion dfdatetime/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import abc
import decimal
import math

from dfdatetime import definitions

Expand Down Expand Up @@ -875,7 +876,7 @@ def _GetTimeValues(self, number_of_seconds):
Returns:
tuple[int, int, int, int]: days, hours, minutes, seconds.
"""
number_of_seconds = int(number_of_seconds)
number_of_seconds = math.floor(number_of_seconds)
number_of_minutes, seconds = divmod(number_of_seconds, 60)
number_of_hours, minutes = divmod(number_of_minutes, 60)
number_of_days, hours = divmod(number_of_hours, 24)
Expand Down
5 changes: 4 additions & 1 deletion dfdatetime/ole_automation_date.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""OLE automation date (or Floatingtime or Application time) implementation."""

import decimal
import math

from dfdatetime import definitions
from dfdatetime import factory
Expand Down Expand Up @@ -130,7 +131,9 @@ def CopyToDateTimeString(self):

timestamp = self._timestamp * definitions.SECONDS_PER_DAY

number_of_days, hours, minutes, seconds = self._GetTimeValues(int(timestamp))
number_of_days, hours, minutes, seconds = self._GetTimeValues(
math.floor(timestamp)
)

year, month, day_of_month = self._GetDateValuesWithEpoch(
number_of_days, self._EPOCH
Expand Down
5 changes: 5 additions & 0 deletions tests/cocoa_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@ def testCopyToDateTimeString(self):
date_time_string = cocoa_time_object.CopyToDateTimeString()
self.assertIsNone(date_time_string)

cocoa_time_object = cocoa_time.CocoaTime(timestamp=-0.25)

date_time_string = cocoa_time_object.CopyToDateTimeString()
self.assertEqual(date_time_string, "2000-12-31 23:59:59.750000")

def testCopyToDateTimeStringISO8601(self):
"""Tests the CopyToDateTimeStringISO8601 function."""
cocoa_time_object = cocoa_time.CocoaTime(timestamp=395011845.546875)
Expand Down
4 changes: 4 additions & 0 deletions tests/delphi_date_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@ def testCopyToDateTimeString(self):
date_time_string = delphi_date_time_object.CopyToDateTimeString()
self.assertEqual(date_time_string, "2013-06-18 19:50:00.553919")

delphi_date_time_object = delphi_date_time.DelphiDateTime(timestamp=-0.000001)
date_time_string = delphi_date_time_object.CopyToDateTimeString()
self.assertEqual(date_time_string, "1899-12-29 23:59:59.913600")

delphi_date_time_object = delphi_date_time.DelphiDateTime()

date_time_string = delphi_date_time_object.CopyToDateTimeString()
Expand Down
9 changes: 9 additions & 0 deletions tests/interface.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
"""Tests for the date and time interfaces."""

import decimal
import unittest

from dfdatetime import definitions
Expand Down Expand Up @@ -725,6 +726,14 @@ def testGetTimeValues(self):
self.assertEqual(minutes, 56)
self.assertEqual(seconds, 50)

days, hours, minutes, seconds = date_time_values._GetTimeValues(
decimal.Decimal("-0.5")
)
self.assertEqual(days, -1)
self.assertEqual(hours, 23)
self.assertEqual(minutes, 59)
self.assertEqual(seconds, 59)

days, hours, minutes, seconds = date_time_values._GetTimeValues(-190990)
self.assertEqual(days, -3)
self.assertEqual(hours, 18)
Expand Down
6 changes: 6 additions & 0 deletions tests/ole_automation_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ def testCopyToDateTimeString(self):
date_time_string = ole_automation_date_object.CopyToDateTimeString()
self.assertEqual(date_time_string, "2017-11-05 11:32:00.038400")

ole_automation_date_object = ole_automation_date.OLEAutomationDate(
timestamp=-0.000001
)
date_time_string = ole_automation_date_object.CopyToDateTimeString()
self.assertEqual(date_time_string, "1899-12-29 23:59:59.913600")

ole_automation_date_object = ole_automation_date.OLEAutomationDate()

date_time_string = ole_automation_date_object.CopyToDateTimeString()
Expand Down
5 changes: 5 additions & 0 deletions tests/posix_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,11 @@ def testGetDateWithTimeOfDay(self):
date_with_time_of_day_tuple = posix_time_object.GetDateWithTimeOfDay()
self.assertEqual(date_with_time_of_day_tuple, (2010, 8, 12, 20, 6, 31))

posix_time_object = posix_time.PosixTimeInMilliseconds(timestamp=-500)

date_with_time_of_day_tuple = posix_time_object.GetDateWithTimeOfDay()
self.assertEqual(date_with_time_of_day_tuple, (1969, 12, 31, 23, 59, 59))

posix_time_object = posix_time.PosixTimeInMilliseconds()

date_with_time_of_day_tuple = posix_time_object.GetDateWithTimeOfDay()
Expand Down
Loading