CSV / Excel에 가장 적합한 타임 스탬프 형식?


110

CSV 파일을 작성하고 있습니다. 최소한 초 단위, 바람직하게는 밀리 초 단위로 정확한 타임 스탬프를 작성해야합니다. 최소한의 사용자 개입으로 Excel에서 정확하고 모호하지 않게 구문 분석 할 수 있도록 CSV 파일의 타임 스탬프에 가장 적합한 형식은 무엇입니까?


출력을 만드는 데 어떤 언어를 사용하고 있습니까?
Peter Perháč

답변:


104

두 번째 정확도를 위해 yyyy-MM-dd HH : mm : ss가 트릭을 수행해야합니다.

나는 Excel이 순식간에 좋지 않다고 생각합니다 (COM 개체 IIRC와 상호 작용할 때 손실됩니다).


예-저는 당신과 Fredrik의 의견에 동의합니다. 참고 문헌을 찾아 낼 수 있다면 확실히 감사하겠습니다. 감사!

18
루비를 사용하는 모든 사용자의 경우 strftime, 해당하는 인수 문자열입니다"%Y-%m-%d %H:%M:%S"
그렉 마 슬리

2
@nickf- .CSV그냥 텍스트 파일입니다. 시간대 또는 파일에 기록하는 모든 것을 쉼표로 구분 된 일반 텍스트로 표시 할 수 있습니다. 중요한 것은 어떤 응용 프로그램이 그것을 읽고 응용 프로그램이 텍스트를 어떻게 기대 하는지 입니다 . 다음 은 의회 도서관의 CSV 표준 문서 입니다. 날짜를 구체적으로 저장하는 규정 된 방법은 없습니다. 또한 RFC-4180CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm).
ashleedawg

C # / IronPython의 File.GetLastWriteTimeUtc ( "당신의 경로-여기") ToString. ( "yyyy- % M- % D % H : % MM %의 SS")
Konrads

strftime ()을 사용하는 파이썬에서 형식은 "%Y-%m-%d %H:%M:%S"Ruby와 동일합니다.
rcronk

18

"yyyy-MM-dd HH : mm : ss"를 사용하라는 이전 제안은 괜찮지 만 Excel이 그보다 훨씬 더 정밀한 시간 해상도를 가지고 있다고 생각합니다. 이 게시물을 찾았 습니다. 오히려 신뢰할 수는 (스레드를 따라 당신은 산술 및 Excel 실험을 많이 볼 수 있습니다), 그리고 올바른 있다면, 당신은 당신의 밀리 초를해야합니다. 끝 부분에 소수점 자리를 붙일 수 있습니다. 예 : "yyyy-mm-dd hh : mm : ss.000".

Excel은 모든 정밀도를 볼 수있는 방식으로 사람의 개입없이 데이터 형식을 반드시 지정하지 않을 수 있습니다. 직장 내 컴퓨터에서 "yyyy-mm-dd hh : mm : ss.000"데이터 (메모장을 사용하여 직접)로 CSV를 설정하면 셀에 "mm : ss.0"이 표시되고 "m / d / yyyy hh : mm : ss AM / PM "입니다.

사람의 개입없이 셀에 전달되는 최대 정보 [1]의 경우 타임 스탬프를 날짜 부분과 시간 부분으로 분할하고 시간 부분은 초로 만 분할 할 수 있습니다. Excel이 주어진 셀에서 최대 3 개의 가시적 "수준"(1 초의 일부는 자체 수준)을 제공하고 사용자는 7 개 (년, 월, 일, 시간, 분, 초, 그리고 몇 분의 1 초.

또는 사람이 읽을 수있는 타임 스탬프가 필요하지 않지만 가능한 한 정확해야하는 경우 큰 숫자 만 저장하는 것이 좋습니다 (내부적으로 Excel은 분수 일수를 포함하여 일 수만 사용함). , "epoch"날짜 이후).


[1] 즉, 숫자 정보입니다. 가능한 한 많은 정보를보고 싶지만 계산에 신경 쓰지 않는다면 Excel이 문자열로 확실히 구문 분석 할 형식을 구성하여 그대로 둘 수 있습니다. 예 : "yyyymmdd.hhmmss.000".


14

"yyyy-MM-dd hh : mm : ss.000"형식은 모든 로케일에서 작동하지 않습니다. 일부 (최소한 덴마크어)의 경우 "yyyy-MM-dd hh : mm : ss, 000"이 더 잘 작동합니다.


2
이상하게도 Excel 2010은 밀리 초 부분이 000 일 때 날짜를 감지하지 못합니다.
Dio F

4

double데이터 유형 을 사용했다면 Excel에서 재 계산이 잘 작동 할 것이라고 생각합니다.


나는 방금 시도했고 정말 잘 작동합니다. Excell에게 특정 열의 형식이 날짜 / 시간임을 알려 주면됩니다. 그것은 분명히 데이터를 설명하지 않는 한 그것은 CSV에서 자동으로이를 감지하지 않습니다
피터 Perháč

3

제어판의 언어 설정으로 이동 한 다음 형식 옵션으로 이동하여 로케일을 선택하고 기본적으로 Windows에서 사용되는 선택한 로케일의 실제 날짜 형식을 확인하십시오. 예, 해당 타임 스탬프 형식은 로케일을 구분합니다. Excel은 CSV를 구문 분석 할 때 이러한 형식을 사용합니다.

더욱이, 로케일이 ASCII 이외의 문자를 사용하는 경우 해당하는 유니 코드 이전 Windows "ANSI"코드 페이지 (예 : CP1251)에서 CSV를 내 보내야합니다. Excel은 UTF-8을 허용하지 않습니다.


1

시간대에 관해서. Excel / OpenOffice의 수식이 결국 날짜 시간을 지역화 할 수 있도록 UTC 오프셋을 UTC에서 초로 저장해야합니다. 나는 이것이 앞에 0이있는 숫자를 저장하는 것보다 쉽다는 것을 알았습니다. -0900은 어떤 스프레드 시트 시스템에서도 잘 분석되지 않았고 가져 오기는 사람들이 수행하도록 교육하는 것이 거의 불가능했습니다.


1

"yyyy-mm-dd hh : mm : ss.000"형식은 모든 로케일에서 작동하지 않습니다. 일부 (최소한 덴마크어)의 경우 "yyyy-mm-dd hh : mm : ss, 000"이 더 잘 작동합니다.

user662894가 응답했습니다.

추가하고 싶습니다. SQL Server의 datetime2 데이터 유형에서 마이크로 초를 가져 오지 마십시오. Excel은 3 초 (즉, 밀리 초) 이상을 처리 할 수 ​​없습니다.

따라서 "yyyy-mm-dd hh : mm : ss.000000"은 작동하지 않으며 Excel에 이러한 종류의 문자열 (CSV 파일에서)이 제공되면 잘림이 아닌 반올림 을 수행 합니다.

이것은 마이크로 초 정밀도가 중요한 경우를 제외하고는 괜찮을 수 있습니다.이 경우 자동 데이터 유형 인식을 트리거하지 않고 문자열을 문자열로 유지하는 것이 좋습니다.


0

내가 추측 할 ISO 포맷은 좋은 아이디어이다. ( Wikipedia 기사 , 시간 정보 포함)


1
(다운 투표, 실제로는 아니요, Excel에서 해당 형식을 인식하지 못함)
Doug

1
@Doug 방금 확인하기 위해 테스트를 실행했습니다. Office 2010, 영어 버전에서 잘 작동하며 두 로컬 설정 (날짜에 ISO 형식을 사용하는 스웨덴어 및 미국 영어)으로 시도했습니다. 관심 없음 : 어떤 환경에서 실패 했습니까? 나는 적어도이 일부 작동하고 일부 실패 놀라게하지 않다 : 엑셀은 ... 내 경험에 정말 일관성 궁금하지 않습니다
프레드릭 Mörk

1
OSX 용 Office 2012에서는 확실히 작동하지 않습니다. 내 테스트에서 인식하는 유일한 '기본'형식은 MM / DD / YYYY HH : MM : SS입니다. 다른 모든 것은 단순히 텍스트로 취급되었습니다.
Doug

1
Excel에서 CSV의 ISO 형식 날짜를 인식하지 못한다는 사실을 알게 된 후이 질문을 찾았습니다. IMO, 그것은 Excel의 버그입니다.
billpg 2014 년

2
@Patrick 일 수 있습니다. 2009 년에는 테스트하기가 조금 어려웠습니다 ;-)
Fredrik Mörk

0

MM / dd / yyyy hh : mm : ss 형식을 사용해보십시오.

XML 파일을 만드는 Java 코드입니다.

xmlResponse.append ( "mydate>"). append (this.formatDate (resultSet.getTimestamp ( "date"), "MM / dd / yyyy hh : mm : ss a")). append ( "");

public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}

0

그래서 이상하게도 CSV 날짜를 다른 방식으로 가져옵니다. csv 파일에서 사용하는 형식에 따라 다르게 표시됩니다. 불행히도 ISO 8061 형식은 문자열로 제공됩니다. 따라서 날짜를 직접 다시 포맷 할 수 없습니다.

날짜로 들어오는 모든 항목에는 전체 정보가 포함되어 있지만 형식이 다릅니다 ... 마음에 들지 않으면 Excel에서 열의 새 형식을 선택할 수 있으며 작동합니다. (참고 : 올바른 날짜 / 시간으로 들어 왔음을 알 수 있습니다. 오른쪽 정렬이 가능합니다 ... 문자열로 들어 오면 왼쪽 정렬됩니다)

테스트 한 형식은 다음과 같습니다.

"yyyy-MM-dd"는 Excel에서 열 때 당연히 날짜로 표시됩니다. ( "MM / dd / yyyy"도 작동 함)

"yyyy-MM-dd HH : mm : ss"기본 표시 형식은 "MM / dd / yyyy HH : mm"(초가없는 날짜 및 시간)입니다.

"yyyy-MM-dd HH : mm : ss.fff"기본 표시 형식은 "HH : mm : ss"입니다 (시간 만 포함).


-1

다음 형식의 datetime 열이있는 csv 파일이 제공됩니다. yyyy-mm-dd hh : mm : ss

Excel에서는 dd / mm / yyyy hh : mm 형식으로 표시합니다.

예 : 2020-05-22 16:40:55는 22/05/2020 16:40으로 표시됩니다.

이는 Windows에서 선택한 짧은 날짜 및 짧은 시간 형식에 의해 분명히 결정됩니다. 예를 들어 Windows에서 간단한 날짜 형식을 yyyy-mm-dd로 변경하면 Excel에 2020-05-22 16:40이 표시됩니다.

짜증나게도 Excel에서 초를 자동으로 표시하는 방법을 찾을 수 없습니다 (Excel에서 열의 서식을 수동으로 지정해야 함). 그러나 csv 파일에 hh : mm : ss 형식 (예 : 16:40:55)의 시간 열이 포함 된 경우 초를 포함하여 Excel에 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.