엑셀 데이터를 작업할 때 가장 불편했던 점 중 하나는 날짜 형식이 자동으로 변경되는 상황이었습니다. 엑셀 시트에 날짜를 YYYY-MM-DD 형식으로 깔끔하게 입력해두었는데, 데이터를 가져올 때마다 자동으로 'YYYY-MM-DD 오전 12:00:00'와 같이 시간까지 붙어 나오는 겁니다. 단순히 날짜 정보만 필요했는데, 불필요하게 시간 정보까지 포함되어 작업 흐름이 끊겨서 수정해보겠습니다.
문제점: 엑셀의 자동 날짜 형식 변환
엑셀에서 데이터를 가져올 때 날짜 형식이 자동으로 변경되는 이유는 엑셀이 기본적으로 날짜와 시간을 같이 처리하는 방식 때문입니다. 엑셀은 날짜를 정수, 시간을 소수로 처리하는 특성을 가지고 있기 때문에, 날짜를 다루는 프로그램에 데이터를 넘기면 날짜와 시간이 같이 변환되는 경우가 많습니다.
내가 필요한 것은 오직 날짜만! 특히 데이터베이스에 입력할 때는 YYYY-MM-DD 형식만 필요한 경우였는데, 불필요한 시간 정보까지 붙어서 데이터를 추가적으로 처리하겠습니다.
해결책: 엑셀 날짜 형식 그대로 가져오기
엑셀에서 날짜 데이터를 가져올 때, YYYY-MM-DD 형식으로만 가져오고 시간을 제거하는 방법으로 해보았어요. 문자열 변환 코드를 사용해 이 문제를 해결하였는데요, 날짜 형식만 남기고 시간을 제거하겠습니다~
string input = data[row, col].ToString();
string output = string.Empty;
DateTime oDateTime = new DateTime(1, 1, 1);
if (DateTime.TryParse(input, out oDateTime))
output = oDateTime.ToString("yyyy-MM-dd");
else
throw new Exception($"{data[1, col].ToString()} 날짜 형식을 확인해 주세요. 값 : {data[row, col]}, 행 : {row}, 열 : {col}");
dr[col - 1] = output;
이 코드는 엑셀에서 불러온 날짜 형식에서 시간을 제거하고 'YYYY-MM-DD' 형식으로만 데이터를 가져오도록 도와줍니다. 덕분에 매번 시간 정보가 붙어 나오는 불편함을 해소했어요.
*해당 예시코드에서는 data[row, col] 값과 data[1, col] 값이 null인 경우는 발생하지 않습니다.
코드 설명
DateTime 변환 시도:
DateTime.TryParse(input, out oDateTime)메서드를 사용해 입력 문자열을DateTime형식으로 변환합니다. 변환이 성공하면 시간까지 포함된 전체 날짜 데이터를 얻을 수 있습니다.
형식 지정:
- 변환된
DateTime객체에서ToString("yyyy-MM-dd")메서드를 사용해 날짜 형식을yyyy-MM-dd로 지정합니다. 이를 통해 시간 정보를 제거하고, 날짜만 추출할 수 있습니다.
- 변환된
예외 처리:
- 변환에 실패할 경우 사용자에게 명확한 예외 메시지를 던져, 어떤 데이터에 문제가 있는지 알려줍니다.
