Hi again, Thanks Dirk for your reply. So there is no way of doing this on the C side?
The thing is that I'm returning a large object that contains a lot of information (about an unstructured 3D model) and some of the fields are DateTimes. I could of cource wrap the call to the C function in an R function that then corrects the dates to GMT (or sets the timezone before calling the C function), but it just not that nice... Previously I had this code written using <RDefines.h> where I could set the timezone on the returned posIXct object: SEXP long2DateTime(long dt) { SEXP result; result = PROTECT(allocVector(REALSXP, 1)); REAL(result)[0] = dt; SEXP gmt = PROTECT(allocVector(STRSXP,1)); SET_STRING_ELT(gmt, 0, mkChar("GMT")); SEXP tzone = PROTECT(allocVector(STRSXP,1)); SET_STRING_ELT(tzone, 0, mkChar("tzone")); setAttrib(result, tzone, gmt); SEXP datetimeclass = PROTECT(allocVector(STRSXP,2)); SET_STRING_ELT(datetimeclass, 0, mkChar("POSIXt")); SET_STRING_ELT(datetimeclass, 1, mkChar("POSIXct")); setAttrib(result, R_ClassSymbol, datetimeclass); UNPROTECT(4); return result; } Janus On Fri, Jan 9, 2015 at 1:22 PM, Dirk Eddelbuettel <e...@debian.org> wrote: > > On 9 January 2015 at 11:50, janus Larsen wrote: > | Hi, > | How do I set the timezone on an Rcpp::Datetime? > | Thanks in advance, > | Sunaj > | > | This returns "1970-01-01 01:00:00 CET" (computer setting), but I want > GMT... > > R does the formatting in its session based on your locale. > > That is generally the right thing: > > | // [[Rcpp::export]] > | Rcpp::Datetime test() { > | double d=0; > | return(d); > | } > > Small corrections to your code to actually export the function (under a > safer > name): > > #include <Rcpp.h> > > // [[Rcpp::export]] > Rcpp::Datetime timetest(double d=0) { > return(d); > } > > Then: > > R> sourceCpp("/tmp/timeQ.cpp") > R> timetest() # my default is Chicago, or -5 > [1] "1969-12-31 18:00:00 CST" > R> as.numeric(timetest()) > [1] 0 > R> Sys.setenv("TZ"="Europe/London") > R> timetest() # I can select another one > [1] "1970-01-01 01:00:00 BST" > R> Sys.setenv("TZ"="UTC") > R> timetest() # incl UTC > [1] "1970-01-01 UTC" > R> > R> format(timetest(), tz="America/Chicago") > [1] "1969-12-31 18:00:00" > R> > > So you need to change the timezone _at the level of your app_ which can be > as > simple as writing a new Date formatter in R as per my last line. > > Dirk > > -- > http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org >
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel