CSV 파일을 작성하고 있습니다. 최소한 초 단위, 바람직하게는 밀리 초 단위로 정확한 타임 스탬프를 작성해야합니다. 최소한의 사용자 개입으로 Excel에서 정확하고 모호하지 않게 구문 분석 할 수 있도록 CSV 파일의 타임 스탬프에 가장 적합한 형식은 무엇입니까?
CSV 파일을 작성하고 있습니다. 최소한 초 단위, 바람직하게는 밀리 초 단위로 정확한 타임 스탬프를 작성해야합니다. 최소한의 사용자 개입으로 Excel에서 정확하고 모호하지 않게 구문 분석 할 수 있도록 CSV 파일의 타임 스탬프에 가장 적합한 형식은 무엇입니까?
답변:
두 번째 정확도를 위해 yyyy-MM-dd HH : mm : ss가 트릭을 수행해야합니다.
나는 Excel이 순식간에 좋지 않다고 생각합니다 (COM 개체 IIRC와 상호 작용할 때 손실됩니다).
.CSV
그냥 텍스트 파일입니다. 시간대 또는 파일에 기록하는 모든 것을 쉼표로 구분 된 일반 텍스트로 표시 할 수 있습니다. 중요한 것은 어떤 응용 프로그램이 그것을 읽고 그 응용 프로그램이 텍스트를 어떻게 기대 하는지 입니다 . 다음 은 의회 도서관의 CSV 표준 문서 입니다. 날짜를 구체적으로 저장하는 규정 된 방법은 없습니다. 또한 RFC-4180 및 CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm).
"%Y-%m-%d %H:%M:%S"
Ruby와 동일합니다.
"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".
"yyyy-MM-dd hh : mm : ss.000"형식은 모든 로케일에서 작동하지 않습니다. 일부 (최소한 덴마크어)의 경우 "yyyy-MM-dd hh : mm : ss, 000"이 더 잘 작동합니다.
"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 파일에서)이 제공되면 잘림이 아닌 반올림 을 수행 합니다.
이것은 마이크로 초 정밀도가 중요한 경우를 제외하고는 괜찮을 수 있습니다.이 경우 자동 데이터 유형 인식을 트리거하지 않고 문자열을 문자열로 유지하는 것이 좋습니다.
내가 추측 할 ISO 포맷은 좋은 아이디어이다. ( Wikipedia 기사 , 시간 정보 포함)
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;
}
그래서 이상하게도 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"입니다 (시간 만 포함).
다음 형식의 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에 표시됩니다.