Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix date time conversion #6

Merged
merged 10 commits into from
Aug 5, 2024
Merged

Fix date time conversion #6

merged 10 commits into from
Aug 5, 2024

Conversation

jefferis
Copy link
Owner

@jefferis jefferis commented Aug 4, 2024

There have been longstanding issues with date time conversion associated with convertIgorDate. The most persistent problems have been with daylight savings dates which seem to be off by an hour on some platforms. However more puzzlingly the package was archived from CRAN because of a failure on macosx arm https://cran-archive.r-project.org/web/checks/2021/2021-10-05_check_results_IgorR.html for a regular date.

     ══ Failed tests ════════════════════════════════════════════════════════════════
     ── Failure (test-ibw.R:28:3): Processing of dates ──────────────────────────────
     .convertIgorDate(3444214517) not equivalent to as.POSIXct("2013-02-20 14:15:17").
     Mean relative difference: 3.966714e-06

I think much of this may boil down to differences in R POSIXct handling vs Igor's of time zone differences, but it's been quite frustrating.

Some recent observations from Igor for a timestamp recorded at 10:39 BST indicate that there is still a fundamental problem in BST:

Variable localNow = DateTime
print /D localNow
  3805612788.244
•print Secs2Date(localNow,  -2)
  2024-08-04
•print Secs2Time(localNow,  3)
  10:39:48
> .convertIgorDate( 3805612788.244)
[1] "2024-08-04 11:39:48 BST"

@jefferis
Copy link
Owner Author

jefferis commented Aug 4, 2024

Further to this, I have checked that Igor assumes that the creation date is in the current timezone

Variable localNow_pdt = DateTime
•print localNow_pdt
  3.80559e+09
•print /C localNow_pdt
  (3.80559e+09,0)
•print /D localNow_pdt
  3805587218.966
•variable cdatepdt= CreationDate(double)
•print /D root:cdatepdt
  3001587842
•print /D root:cdate
  3001587842
•print Secs2Time(cdate, 3)
  14:24:02
•print Secs2Time(cdatepdt, 3)
  14:24:02
•print Secs2Date(cdatepdt, 3)
  Thu 11 Feb 1999
•print Secs2Date(localNow, 3)
  Sun 4 Aug 2024
•print Secs2Time(localNow, 3)
  10:39:48
•print Secs2Time(localNow_pdt, 3)
  03:33:38
•print Date2Secs(-1,-1,-1)
  -25200
•print -25200/3600
  -7

* and add many more tests
* main problem was the handling of daylight saving offsets
* a different result is required when offsets are enforced
* also added tz to all tests since these are otherwise not reproducible
* new dependency timechange is required
* this takes care of all the offset issues
The mandatory ‘Description’ field should give a comprehensive description of what the package does. One can use several (complete) sentences, but only one paragraph. It should be intelligible to all the intended readership (e.g. for a CRAN package to all CRAN users). It is good practice not to start with the package name, ‘This package’ or similar. As with the ‘Title’ field, double quotes should be used for quotations (including titles of books and articles), and single quotes for non-English usage, including names of other packages and external software. This field should also be used for explaining the package name if necessary. URLs should be enclosed in angle brackets, e.g. ‘<https://www.r-project.org>’: see also Specifying URLs.
* see PTN003
* also suppress some warnings when reading pxps
* there is still a point that's rather inelegant where we
  read records of type 8 (packed notebooks) and then ignore them if they look badly formatted
* for this I had to use suppressWarnings to avoid the new readChar warning
@jefferis jefferis merged commit a90c003 into master Aug 5, 2024
6 checks passed
@jefferis jefferis deleted the fix/datetime branch August 5, 2024 06:30
res=res-dst_correction
# this takes care of tz offset differences between the actual date and the origin
# e.g. because date is during daylight savings (but origin was not)
res=timechange::time_add(igor_origin, second = dateval)
res
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the key change it seems. I'm not quite sure why a straight add doesn't do this but ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant