# This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # Copyrights (C) # for this R-port: # 1999 - 2008, Diethelm Wuertz, Rmetrics Foundation, GPL # Diethelm Wuertz # info@rmetrics.org # www.rmetrics.org # for the code accessed (or partly included) from other R-ports: # see R's copyright and license files # for the code accessed (or partly included) from contributed R-ports # and other sources # see Rmetrics's copyright file ################################################################################ # FUNCTION: GENERATION OF TIMEDATE OBJECTS: # timeCalendar Creates a 'timeDate' object from calendar atoms ################################################################################ timeCalendar <- function(y = currentYear, m = 1:12, d = 1, h = 0, min = 0, s = 0, zone = myFinCenter, FinCenter = myFinCenter) { # A function implemented by Diethelm Wuertz # Description: # Creates a 'timeDate' object from calendar atoms # Arguments: # y - calendar years (e.g. 1997), defaults are 1960. # m - calendar months (1-12), defaults are 1. # d - calendar days (1-31), defaults are 1. # h - hours of the days (0-23), defaults are 0. # min - minutes of the days (0-59), defaults are 0. # s - seconds of the days (0-59), defaults are 0. # FinCenter - a character sting with the the location of the # financial center named as "continent/city" # Value: # Returns a 'timeDate' object corresponding to the "atomic" # inputs. For the default arguments the first day in each # month of the current year will be returned. # Details: # Creates a 'timeDate' object from date as month, day, year and # time of day as hours, and minutes [seconds, milliseconds] # Note: # The 'zone' where the data were recorded is fixed to myFincenter! # The argument list has ISO-8601 ordering! # ms - Milliseconds is not supported. # Example: # x = timeCalendar(y = 2000, h = rep(16,12)) # x = timeCalendar(m = c(3,4,5), d = c(12,15,7), y = c(1998,1997,2004)) # x = timeCalendar(h = c(9,14), min = c(15,23)) # FUNCTION: # Settings and Check: trace = FALSE if (FinCenter == "") FinCenter = "GMT" if (is.null(h) & is.null(min) & is.null(s)) zone = FinCenter # Check Time Zone: TZ <- Sys.getenv("TZ") if(TZ[[1]] != "GMT") { Sys.setenv(TZ = "GMT") on.exit(Sys.setenv(TZ = TZ)) } # Check Input: len = c(length(m), length(d), length(y), length(h), length(min), length(s)) data.len = max(len) if (data.len < 1) stop("No arguments defined!") if (any((data.len %% len[len > 0]) != 0)) stop("Arguments have incompatible lengths") # Make All Arguments the Same Length: if (len[1] == 0) m = 1 if (len[2] == 0) d = 1 if (len[3] == 0) y = 1960 if (len[4] == 0) h = 0 if (len[5] == 0) min = 0 if (len[6] == 0) s = 0 # Presettings: # m = rep(m, length = data.len) # d = rep(d, length = data.len) # y = rep(y, length = data.len) # h = rep(h, length = data.len) # min = rep(min, length = data.len) # s = rep(s, length = data.len) # DW 2006-03-13 if (length(m) < data.len) m = rep(m, length = data.len) if (length(d) < data.len) d = rep(d, length = data.len) if (length(y) < data.len) y = rep(y, length = data.len) if (length(h) < data.len) h = rep(h, length = data.len) if (length(min) < data.len) min = rep(min, length = data.len) if (length(s) < data.len) s = rep(s, length = data.len) # Date-Time Strings: # Note Format is always of type "%Y%m%d%H%M%S" ! CCYYMMDD = as.integer(y*10000 + m*100 + d) chardate = as.character(CCYYMMDD) xhhmmss = as.integer(1000000 + h*10000 + min*100 + s) # Date and Date/Time Checks: if (mean(xhhmmss) == 1000000) { chartime = substr(as.character(xhhmmss), 2, 7) charvec = as.vector(chardate) format = "%Y%m%d" } else { chartime = substr(as.character(xhhmmss), 2, 7) charvec = paste(as.vector(chardate), as.vector(chartime), sep = "") format = "%Y%m%d%H%M%S" } # Return Value: timeDate(charvec = charvec, format = format, zone = zone, FinCenter = FinCenter) } ################################################################################