# Today, I immersed myself in the intricacies of R’s date-time classes, specifically focusing on POSIXct and POSIXlt. I found myself deeply engaged in experimenting with these powerful tools, refining my understanding of how R handles date-time objects with precision. I configured various aspects, from fractional seconds to time zones, and I appreciated the control I had over every detail.
# 
# I meticulously formatted a date-time object, extracting seconds, minutes, hours, and even the time zone abbreviation. As I manipulated the time, I relished the capability to add and subtract seconds, minutes, and hours effortlessly. I meticulously calculated time intervals and appreciated the seamless functionality of difftime() in measuring precise differences.
# 
# Parsing strings into date-time objects offered me further insights. I recognized how crucial it is to provide the correct format, especially when dealing with varying time zones and formats. I configured specific time zones, like "America/New_York" and "America/Chicago," and observed how R adjusts to these nuances with accuracy.
# Formatting and printing date-time objects
options(digits.secs = 3)
d = as.POSIXct("2023-11-03 18:45:15.987", tz = "America/New_York")
format(d, "%S")  # 00-61 Second as integer
## [1] "15"
format(d, "%OS") # 00-60.99… Second as fractional
## [1] "15.986"
format(d, "%M")  # 00-59 Minute
## [1] "45"
format(d, "%H")  # 00-23 Hours
## [1] "18"
format(d, "%I")  # 01-12 Hours
## [1] "06"
format(d, "%p")  # AM/PM Indicator
## [1] "PM"
format(d, "%z")  # Signed offset
## [1] "-0400"
format(d, "%Z")  # Time Zone Abbreviation
## [1] "EDT"
# Date-time arithmetic
as.POSIXct("2023-05-01") + 120  # adding 120 seconds (2 minutes)
## [1] "2023-05-01 00:02:00 EDT"
as.POSIXct("2023-05-01") + ((5 * 60 * 60) + (20 * 60) + 45)  # adding 5 hours, 20 minutes, 45 seconds
## [1] "2023-05-01 05:20:45 EDT"
# Using as.difftime to specify time periods
as.POSIXct("2023-05-01") +
  as.difftime(5, units = "hours") +
  as.difftime(20, units = "mins") +
  as.difftime(45, units = "secs")
## [1] "2023-05-01 05:20:45 EDT"
# Using difftime() for differences
difftime(
  as.POSIXct("2023-05-01 14:30:00"),
  as.POSIXct("2023-05-01 14:29:30"),
  unit = "secs"
)
## Time difference of 30 secs
# Parsing strings into date-time objects
as.POSIXct("15:45", format = "%H:%M")
## [1] "2024-11-03 15:45:00 EST"
strptime("15:45", format = "%H:%M")  # POSIXlt object
## [1] "2024-11-03 15:45:00 EST"
as.POSIXct("8 PM", format = "%I %p")
## [1] "2024-11-03 20:00:00 EST"
as.POSIXct("22:15:30", format = "%H:%M:%S", tz = "America/Chicago")
## [1] "2024-11-03 22:15:30 CST"
as.POSIXct("2023-11-03 08:00:00", format = "%F %T")
## [1] "2023-11-03 08:00:00 EDT"
# Load the packages
library(knitr)
library(kableExtra)

# Create the data frame with sample data
data <- data.frame(
  Step = c("Formatting Date-Time", 
           "Date-Time Arithmetic", 
           "Using difftime()", 
           "Parsing Strings"),
  Code_Snippet = c(
    "options(digits.secs = 3)\nd <- as.POSIXct('2023-11-03 18:45:15.987', tz = 'America/New_York')",
    "as.POSIXct('2023-05-01') + ((5 * 60 * 60) + (20 * 60) + 45)",
    "difftime(as.POSIXct('2023-05-01 14:30:00'), as.POSIXct('2023-05-01 14:29:30'), unit = 'secs')",
    "as.POSIXct('22:15:30', format = '%H:%M:%S', tz = 'America/Chicago')"
  )
)

# Create the table with colored rows
data %>%
  kable("html", escape = FALSE, col.names = c("Step", "Code Snippet")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(1, background = "#E8F6F3") %>%  # Light teal
  row_spec(2, background = "#FDEBD0") %>%  # Light orange
  row_spec(3, background = "#F6DDCC") %>%  # Light peach
  row_spec(4, background = "#D6EAF8")      # Light blue
Step Code Snippet
Formatting Date-Time options(digits.secs = 3) d <- as.POSIXct(‘2023-11-03 18:45:15.987’, tz = ‘America/New_York’)
Date-Time Arithmetic as.POSIXct(‘2023-05-01’) + ((5 * 60 * 60) + (20 * 60) + 45)
Using difftime() difftime(as.POSIXct(‘2023-05-01 14:30:00’), as.POSIXct(‘2023-05-01 14:29:30’), unit = ‘secs’)
Parsing Strings as.POSIXct(‘22:15:30’, format = ‘%H:%M:%S’, tz = ‘America/Chicago’)