[excel] Unix 타임 스탬프에 대한 Excel 날짜

누구든지 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 +%ztzhours-0700+053007050030tzhours 필요한 경우.

이 페이지의 다른 모든 답변에 제공된 공식은을 설정하는 데 사용되며 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/0159    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 월은로 분리되어야합니다. 및,

이 문제가 발생하는 경우 도움이되기를 바랍니다. 좋은 하루 되세요 🙂