Zoeken…


Invoering

R wordt geleverd met klassen voor datums, datum-tijden en tijdsverschillen; zie ?Dates ?difftime ?DateTimeClasses ?difftime en volg de sectie "Zie ook" van die documenten voor verdere documentatie. Gerelateerde documenten: datums en datum-tijdklassen .

Opmerkingen

Klassen

  • POSIXct

    Een datum-tijdklasse, POSIXct slaat tijd op als seconden sinds het UNIX-tijdperk op 1970-01-01 00:00:00 UTC . Het is het formaat dat wordt geretourneerd wanneer de huidige tijd wordt getrokken met Sys.Time() .

  • POSIXlt

    Een datum-tijdklasse, slaat een lijst op van dag, maand, jaar, uur, minuut, seconde, enzovoort. Dit is het formaat dat wordt geretourneerd door strptime .

  • Datum De enige datumklasse, slaat de datum op als een getal met drijvende komma.

Een datum-tijdnotatie selecteren

POSIXct is de enige optie in de opruiming en de wereld van UNIX. Het is sneller en neemt minder geheugen in beslag dan POSIXlt.

origin = as.POSIXct("1970-01-01 00:00:00", format ="%Y-%m-%d %H:%M:%S", tz = "UTC")

origin
## [1] "1970-01-01 UTC"

origin + 47
## [1] "1970-01-01 00:00:47 UTC"

as.numeric(origin)     # At epoch
## 0

as.numeric(Sys.time()) # Right now (output as of July 21, 2016 at 11:47:37 EDT)
## 1469116057

posixlt = as.POSIXlt(Sys.time(), format ="%Y-%m-%d %H:%M:%S", tz = "America/Chicago")

# Conversion to POISXct
posixct = as.POSIXct(posixlt)
posixct

# Accessing components
posixlt$sec   # Seconds 0-61
posixlt$min   # Minutes 0-59
posixlt$hour  # Hour 0-23
posixlt$mday  # Day of the Month 1-31
posixlt$mon   # Months after the first of the year 0-11
posixlt$year  # Years since 1900.

ct = as.POSIXct("2015-05-25")
lt = as.POSIXlt("2015-05-25")

object.size(ct)
# 520 bytes
object.size(lt)
# 1816 bytes

Gespecialiseerde pakketten

  • op elk gewenst moment
  • data.table IDate en ITime
  • snelle tijd
  • lubridate
  • nanotime

Huidige datum en tijd

R heeft toegang tot de huidige datum, tijd en tijdzone:

Sys.Date()             # Returns date as a Date object

## [1] "2016-07-21"

Sys.time()             # Returns date & time at current locale as a POSIXct object

## [1] "2016-07-21 10:04:39 CDT"

as.numeric(Sys.time()) # Seconds from UNIX Epoch (1970-01-01 00:00:00 UTC)

## [1] 1469113479

Sys.timezone()         # Time zone at current location

## [1] "Australia/Melbourne"

Gebruik OlsonNames() om de tijdzonenamen in de Olson / IANA-database op het huidige systeem te bekijken:

str(OlsonNames())
## chr [1:589] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa" "Africa/Algiers" "Africa/Asmara" "Africa/Asmera" "Africa/Bamako" ...

Ga naar het einde van de maand

Laten we zeggen dat we naar de laatste dag van de maand willen gaan, deze functie helpt daarbij:

eom <- function(x, p=as.POSIXlt(x)) as.Date(modifyList(p, list(mon=p$mon + 1, mday=0)))

Test:

x <- seq(as.POSIXct("2000-12-10"),as.POSIXct("2001-05-10"),by="months")
> data.frame(before=x,after=eom(x))
      before      after
1 2000-12-10 2000-12-31
2 2001-01-10 2001-01-31
3 2001-02-10 2001-02-28
4 2001-03-10 2001-03-31
5 2001-04-10 2001-04-30
6 2001-05-10 2001-05-31
> 

Een datum in een tekenreeksindeling gebruiken:

> eom('2000-01-01')
[1] "2000-01-31"

Ga naar de eerste dag van de maand

Laten we zeggen dat we naar de eerste dag van een bepaalde maand willen gaan:

date <- as.Date("2017-01-20")

> as.POSIXlt(cut(date, "month"))
[1] "2017-01-01 EST"

Verplaats een datum een aantal maanden consequent met maanden

Laten we zeggen dat we een bepaalde datum een num maanden willen verplaatsen. We kunnen de volgende functie definiëren, die het mondate pakket gebruikt:

moveNumOfMonths <- function(date, num) {
    as.Date(mondate(date) + num)
}

Het beweegt consequent het maandgedeelte van de datum en past de dag aan, voor het geval de datum verwijst naar de laatste dag van de maand.

Bijvoorbeeld:

Terug een maand:

> moveNumOfMonths("2017-10-30",-1)
[1] "2017-09-30"

Twee maanden terug:

> moveNumOfMonths("2017-10-30",-2)
[1] "2017-08-30"

Twee maanden vooruit:

> moveNumOfMonths("2017-02-28", 2)
[1] "2017-04-30"

Het verplaatst zich twee maanden vanaf de laatste dag van februari, dus de laatste dag van april.

Laten we eens kijken hoe het werkt voor achterwaartse en voorwaartse bewerkingen wanneer het de laatste dag van de maand is:

> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
> moveNumOfMonths("2017-01-31", -2)
[1] "2016-11-30"

Omdat november 30 dagen heeft, krijgen we dezelfde datum in de achterwaartse bewerking, maar:

> moveNumOfMonths("2017-01-30", -2)
[1] "2016-11-30"
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"

Omdat januari 31 dagen heeft, krijgt twee maanden verplaatsen vanaf de laatste dag van november de laatste dag van januari.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow