R語言 : as.Date() 中的小陷阱, time zone
在HR資料處理中,其中一個關鍵便是出勤資料了。,通常完整的資料除了上班打卡時間 / 下班打卡時間以外,通常還需要一個欄位,將打卡的時間歸類於幾月幾號的工時, 例如: 2022/10/28 23:00上班 / 2022/10/29 09:00下班,而歸屬日期為10/28 但現實也不免為碰到不完整的資料無法進行判別,因此需要透過打卡時間或者班別來推斷日期,於是便於其中一個打卡時間萃取日期出來,然後應用as.Date()轉換就完成萃取。 但我們都沒想到的是,單純的使用as.Date( ) 卻會因為系統時差轉換而和我們心中的理想日期有所誤差。 as.Date("yyyy-mm-dd hh:mm:ss",tz = Sys.timezone()) 因此我們需要tz 函數來執行細節設定好讓我們確認時間能夠和預期相符。 在此直接列出使用範例: CHECK <- Time %>% mutate(as_date = as.Date(PUNCH_TIME), as_date_Taiwan = as.Date( PUNCH_TIME ,tz = "Asia/Taipei"), #台灣 as_date_Kolkata = as.Date( PUNCH_TIME ,tz = "Asia/Kolkata"), #印度 DIFF = ifelse((as_date!=as_date_Taiwan| as_date!=as_date_Kolkata| as_date_Taiwan!=as_date_Kolkata),1,0)) %>% filter(DIFF ==1) CHECK %<>% filter(as_date_Taiwan != as_date_Kolkata) CHECK_INDIA %<>% select( PUNCH_TIME , as_date,as_date_Taiwan,as_date_Kolkata) 印度時間早台灣2.5小時,因此投一筆資料會直接將日期轉換為2022-09-01而非我們預想...