RcppCCTZ v0.2.5


Monthly downloads



'Rcpp' Bindings for the 'CCTZ' Library

'Rcpp' Access to the 'CCTZ' timezone library is provided. 'CCTZ' is a C++ library for translating between absolute and civil times using the rules of a time zone. The 'CCTZ' source code, released under the Apache 2.0 License, is included in this package. See <https://github.com/google/cctz> for more details.


RcppCCTZ Build Status License CRAN Downloads

Rcpp bindings for CCTZ

What is CCTZ?

CCTZ (C++ Time Zone) is an excellent (yet small) C++11 library for translating between absolute times and civil times using the rules defined by a time zone. See its repository (as well as code) for very detailed documentation. CCTZ is being developed by Google but not an officially endorsed product.

What is RcppCCTZ?

This package wraps CCTZ for use by R via Rcpp.


Difference between Timezones

R> # simple call: difference now
R> tzDiff("America/New_York", "Europe/London", Sys.time())
[1] 5
R> # tabulate difference for every week of the year
R> table(sapply(0:52, function(d) tzDiff("America/New_York", "Europe/London",
+                                        as.POSIXct(as.Date("2016-01-01") + d*7))))

 4  5 
 3 50

Shifting Timezone

R> # Given current time in NY what is the time London, UK
R> # (running the code locally in Chicago hence CST text format)    
R> toTz(Sys.time(), "America/New_York", "Europe/London")     
[1] "2016-12-10 17:15:04.20370 CST"
R> # this redoes the 'Armstrong on the moon in NYC and Sydney' example
R> # note that the default print method will print the return object in _your local time_
R> toTz(ISOdatetime(1969,7,20,22,56,0,tz="UTC"), "America/New_York", "Australia/Sydney", TRUE)
1969-07-20 22:56:00 -0400
1969-07-21 12:56:00 +1000
[1] "1969-07-20 21:56:00 CDT"
R> # whereas explicitly formating for Sydney time does the right thing
R> format(toTz(ISOdatetime(1969,7,20,22,56,0,tz="UTC"), 
+             "America/New_York", "Australia/Sydney", verbose=TRUE), 
+        tz="Australia/Sydney")
1969-07-20 22:56:00 -0400
1969-07-21 12:56:00 +1000
[1] "1969-07-21 12:56:00"

Parsing and Formatting

R> now <- Sys.time()
R> formatDatetime(now)            # current (UTC) time, in full precision RFC3339
[1] "2016-12-10T18:23:03.327956+00:00"
R> formatDatetime(now, tgttzstr="America/New_York")  # same but in NY
[1] "2016-12-10T13:23:03.327956-05:00"
R> formatDatetime(now + 0:4)       # vectorised
[1] "2016-12-10T18:23:03.327956+00:00" "2016-12-10T18:23:04.327956+00:00" 
[3] "2016-12-10T18:23:05.327956+00:00" "2016-12-10T18:23:06.327956+00:00"
[5] "2016-12-10T18:23:07.327956+00:00"

R> ds <- getOption("digits.secs")
R> options(digits.secs=6) # max value
R> parseDatetime("2016-12-07 10:11:12",        "%Y-%m-%d %H:%M:%S");   # full seconds
[1] "2016-12-07 04:11:12 CST"
R> parseDatetime("2016-12-07 10:11:12.123456", "%Y-%m-%d %H:%M:%E*S"); # fractional seconds
[1] "2016-12-07 04:11:12.123456 CST"
R> parseDatetime("2016-12-07T10:11:12.123456-00:00")  ## default RFC3339 format
[1] "2016-12-07 04:11:12.123456 CST"
R> now <- trunc(Sys.time())
R> parseDatetime(formatDatetime(now + 0:4))                   # vectorised
[1] "2016-12-10 12:24:25 CST" "2016-12-10 12:24:26 CST" "2016-12-10 12:24:27 CST"
[4] "2016-12-10 12:24:28 CST" "2016-12-10 12:24:29 CST"
R> options(digits.secs=ds)


The CCTZ library depends on timezone files typically found in /usr/share/zoneinfo which requires a Unix-alike OS such as Linux or OS X. Old school Unix variants may work.


On CRAN, builds and tests cleanly, and the example functions are accessible from R.


Dirk Eddelbuettel


GPL (>= 2)

Functions in RcppCCTZ

Name Description
tzDiff Return difference between two time zones at a given date.
parseDatetime Parse a Datetime vector from a string vector
toTz Shift datetime object from one timezone to another
RcppCCTZ-package A Simple Wrapper to the CCTZ Library for Time Zone Calculations
formatDatetime Format a Datetime vector as a string vector
No Results!

Last month downloads


Type Package
Date 2018-10-14
License GPL (>= 2)
LinkingTo Rcpp
SystemRequirements A 64-bit POSIX OS such as Linux or OS X with IANA time zone data in /usr/share/zoneinfo as well as a recent-enough C++11 compiler (such as g++-4.9 or later which is preferred, g++-4.8 works too). On Windows the zoneinfo included with R is used; and time parsing support is enabled via a backport of std::get_time from the LLVM libc++ library.
URL https://github.com/eddelbuettel/rcppcctz
BugReports https://github.com/eddelbuettel/rcppcctz/issues
RoxygenNote 6.0.1
NeedsCompilation yes
Packaged 2018-10-14 14:43:38.203346 UTC; edd
Repository CRAN
Date/Publication 2018-10-14 17:31:56
imports Rcpp (>= 0.11.0)
suggests RUnit
Contributors Dirk Eddelbuettel

Include our badge in your README