누구든지 Excel 날짜를 올바른 Unix 타임 스탬프로 변환하는 방법을 알고 있습니까?
답변
이것들 중 아무것도 나를 위해 일하지 않았습니다 … 타임 스탬프를 다시 변환했을 때 4 년이 걸립니다.
이것은 완벽하게 작동했습니다. =(A2-DATE(1970,1,1))*86400
출처 : Filip Czaja http://fczaja.blogspot.ca
원본 게시물 : http://fczaja.blogspot.ca/2011/06/convert-excel-date-into-timestamp.html
답변
Windows 및 Mac Excel (2011) :
Unix Timestamp = (Excel Timestamp - 25569) * 86400
Excel Timestamp = (Unix Timestamp / 86400) + 25569
MAC OS X (2007) :
Unix Timestamp = (Excel Timestamp - 24107) * 86400
Excel Timestamp = (Unix Timestamp / 86400) + 24107
참고로 :
86400 = Seconds in a day
25569 = Days between 1970/01/01 and 1900/01/01 (min date in Windows Excel)
24107 = Days between 1970/01/01 and 1904/01/02 (min date in Mac Excel 2007)
답변
Excel의 날짜가 날짜 형식의 A1 셀에 있고 Unix 타임 스탬프가 숫자 형식의 A2 셀에 있어야한다고 가정하면 A2의 수식은 다음과 같아야합니다.
= (A1 * 86400)-2209075200
어디:
86400은 하루의 초 수입니다. 2209075200은 Excel 및 Unix 타임 스탬프의 기본 날짜 인 1900-01-01과 1970-01-01 사이의 초 수입니다.
위의 내용은 Windows에 해당됩니다. Mac에서 Excel의 기본 날짜는 1904-01-01이고 초 숫자는 2082844800으로 수정되어야합니다.
답변
다음은 Microsoft Excel과 같은 스프레드 시트 시스템에 대해 UTC 를 가정 한 참조 용 매핑입니다 .
Unix Excel Mac Excel Human Date Human Time
Excel Epoch -2209075200 -1462 0 1900/01/00* 00:00:00 (local)
Excel ≤ 2011 Mac† -2082758400 0 1462 1904/12/31 00:00:00 (local)
Unix Epoch 0 24107 25569 1970/01/01 00:00:00 UTC
Example Below 1234567890 38395.6 39857.6 2009/02/13 23:31:30 UTC
Signed Int Max 2147483648 51886 50424 2038/01/19 03:14:08 UTC
One Second 1 0.0000115740… — 00:00:01
One Hour 3600 0.0416666666… ― 01:00:00
One Day 86400 1 1 ― 24:00:00
* ‘Jan Zero, 1900’은 1899/12/31입니다. 아래의 버그 섹션을 참조하십시오 . † Mac 용 Excel 2011 (및 이전 버전)은 1904 날짜 체계를 사용합니다 .
CSV 및 공백으로 구분 된 콘텐츠 awk
를 처리 하는 데 자주 사용 하면서 UNIX 시대를 시간대 / DST에 적합한 Excel 날짜 형식 으로 변환하는 방법을 개발했습니다 .
echo 1234567890 |awk '{
# tries GNU date, tries BSD date on failure
cmd = sprintf("date -d@%d +%%z 2>/dev/null || date -jf %%s %d +%%z", $1, $1)
cmd |getline tz # read in time-specific offset
hours = substr(tz, 2, 2) + substr(tz, 4) / 60 # hours + minutes (hi, India)
if (tz ~ /^-/) hours *= -1 # offset direction (east/west)
excel = $1/86400 + hours/24 + 25569 # as days, plus offset
printf "%.9f\n", excel
}'
내가 사용 echo
이 예를 들어,하지만 당신은 파이프 첫 번째 열 (.CSV 형식의 첫 번째 셀에 대한이 같은 호출 파일을 할 수있는 awk -F,
) 유닉스 시대입니다. $1
원하는 열 / 셀 번호를 나타내도록 변경 하거나 대신 변수를 사용하십시오.
이렇게하면에 대한 시스템 호출이 생성됩니다 date
. GNU 버전을 안정적으로 사용하려면 2>/dev/null || date … +%%z
및 두 번째 , $1
. GNU가 얼마나 일반적인지를 감안할 때 BSD 버전을 가정하지 않는 것이 좋습니다.
는 로 getline
출력 된 표준 시간대 오프셋을 읽은 다음로 변환됩니다 . 형식과 같은 것 ( PDT ) 또는 ( IST 추출 제 문자열이되도록) 나 , 제는 또는 (다음 시간에 표현하는 60로 나눈 값)과의 세 번째 사용 되는 우리의 오프셋 여부 보는 음극과 달라져date +%z
tz
hours
-0700
+0530
07
05
00
30
tz
hours
필요한 경우.
이 페이지의 다른 모든 답변에 제공된 공식은을 설정하는 데 사용되며 excel
일광 절약 시간 인식 시간대 조정을 hours/24
.
이전 버전의 Mac 용 Excel을 사용 24107
하는 경우 대신 다음 을 사용해야합니다 .25569
(위의 매핑 참조).
임의의 비 Epoch 시간을 GNU 날짜를 사용하여 Excel에 적합한 시간으로 변환하려면 :
echo "last thursday" |awk '{
cmd = sprintf("date -d \"%s\" +\"%%s %%z\"", $0)
cmd |getline
hours = substr($2, 2, 2) + substr($2, 4) / 60
if ($2 ~ /^-/) hours *= -1
excel = $1/86400 + hours/24 + 25569
printf "%.9f\n", excel
}'
이것은 기본적으로 동일한 코드이지만 date -d
더 이상 @
유닉스 시대를 나타내는 데 더 이상 필요하지 않습니다 (문자열 파서가 얼마나 능력이 있는가를 감안할 때, 실제로 @
는 필수입니다; 다른 날짜 형식에 9-10 자리가 있습니까?). 위한 두 개의 출력 : 에포크 및 시간대 오프셋. 따라서 예 @1234567890
를 들어 입력으로 사용할 수 있습니다 .
곤충
Lotus 1-2-3 (원래 스프레드 시트 소프트웨어)은 1900 년 이 아니 었음에도 불구하고 의도적 으로 1900 년을 윤년 으로 취급 했습니다 (이는 모든 바이트를 계산할 때 코드베이스를 줄였습니다). Microsoft Excel 은 호환성을 위해이 버그를 유지 하여 60 일 (가상 1900/02/29)을 건너 뛰고 Lotus 1-2-3의 59 일을 1900/02/28 일로 매핑했습니다. LibreOffice는 대신 60 일을 1900/02/28로 할당하고 이전의 모든 날을 뒤로 밀었습니다.
1900/03/01 이전의 모든 날짜는 쉬는 날과 같을 수 있습니다.
Day Excel LibreOffice
-1 -1 1899/12/29
0 1900/01/00* 1899/12/30
1 1900/01/01 1899/12/31
2 1900/01/02 1900/01/01
…
59 1900/02/28 1900/02/27
60 1900/02/29(!) 1900/02/28
61 1900/03/01 1900/03/01
Excel은 음수 날짜를 인식하지 않으며 0 일에 대한 1 월 0 일 (1899/12/31)에 대한 특별한 정의가 있습니다. 내부적으로 Excel은 실제로 음수 날짜를 처리하지만 (결국 숫자 일뿐) 날짜로 표시하는 방법을 모르기 때문에 숫자로 표시합니다 (이전 날짜를 음수로 변환 할 수도 없음). 일이 없었던 1900 년 2 월 29 일은 Excel에서는 인식되지만 LibreOffice에서는 인식되지 않습니다.
답변
위의 편집 내용이 거부 되었기 때문에 (실제로 시도한 사람이 있습니까?),이 작업을 수행하는 데 실제로 필요한 것은 다음과 같습니다.
Windows (및 Mac Office 2011+) :
- Unix 타임 스탬프 =
(Excel Timestamp - 25569) * 86400
- Excel 타임 스탬프 =
(Unix Timestamp / 86400) + 25569
MAC OS X (Pre Office 2011) :
- Unix 타임 스탬프 =
(Excel Timestamp - 24107) * 86400
- Excel 타임 스탬프 =
(Unix Timestamp / 86400) + 24107
답변
당신은 분명히 하루, 정확히 86400 초 떨어져 있습니다. 번호 2209161600을 사용하세요. 번호 2209075200이 아닙니다. 두 번호를 Google에 검색하면 위의 지원을 찾을 수 있습니다. 나는 당신의 공식을 시도했지만 항상 내 서버와 다른 하루가 올랐습니다. 인간의 시간 대신 유닉스에서 생각하지 않는 한 유닉스 타임 스탬프에서 명확하지 않습니다 😉 그러나 다시 확인하면 이것이 정확할 수 있음을 알 수 있습니다.
답변
나는 2010.03.28 20:12:30 과 같이 “사람이 읽을 수있는”날짜를 가진 오래된 Excel 데이터베이스를 가지고있었습니다. Theese
날짜는 UTC + 1 (CET)로되어 있었고 그것을 epoch 시간으로 변환해야했습니다.
I는 사용 86400-3600 * = (; 1) A4-DATE (1970) 수식 B 열 값은 A 열에서 에포크 시간 기간을 변환한다. 시간대 오프셋을 확인하고 계산해보세요. 1 시간은 3600 초입니다.
내가 여기에 답글을 쓰는 유일한 이유는이 주제가 5 년 이상 된 것임을 알 수 있습니다.이 주제에서 새 Excel 버전과 빨간색 게시물을 사용한다는 것입니다. DATE (1970; 1; 1). 여기서 1970 년과 1 월은로 분리되어야합니다. 및,
이 문제가 발생하는 경우 도움이되기를 바랍니다. 좋은 하루 되세요 🙂