[C#] DateTimePicker DateTime Class
C# 2026. 4. 7. 13:43 |DateTimePicker로 날짜와 시간을 선택하고 DateTime 클래스를 사용해 보자.

using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
string date;
string time;
string dateTime;
string[] mkvFiles;
DateTime[] mkvFilesInDateTime;
public Form1()
{
InitializeComponent();
// 현재 날짜와 시간 초기화
date = DateTime.Now.ToString("yyyyMMdd");
time = DateTime.Now.ToString("HHmmss");
dateTime = date + "-" + time;
// 이벤트 핸들러 등록
dateTimePicker1.ValueChanged += dateTimePicker1_ValueChanged;
dateTimePicker2.ValueChanged += dateTimePicker2_ValueChanged;
// DateTimePicker1 설정, 이렇게 하면 날짜와 시간 모두 선택할 수 있다.
//dateTimePicker1.Format = DateTimePickerFormat.Custom;
//dateTimePicker1.CustomFormat = "yyyy-MM-dd HH:mm:ss";
// DateTimePicker2 설정, 시간과 분만 선택할 수 있도록 설정한다.
dateTimePicker2.Format = DateTimePickerFormat.Custom;
dateTimePicker2.CustomFormat = "HH:mm"; // 시간과 분만 표시하여 초 선택을 없앰
dateTimePicker2.ShowUpDown = true; // 시간 선택을 위한 UpDown 컨트롤 표시
// TextBox 설정
textBox1.Multiline = true;
textBox1.Height = textBox1.Font.Height * 6;
// Button 이벤트 핸들러 등록
button1.Click += button1_Click;
// MKV 파일 검색 및 TextBox에 출력
GetMkvFiles();
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
DateTime selectedDate = dateTimePicker1.Value;
date = selectedDate.ToString("yyyyMMdd");
dateTime = date + "-" + time;
}
private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
{
DateTime selectedTime = dateTimePicker2.Value;
// 초 선택이 없으므로 "HHmm00"으로 초를 항상 00으로 고정
time = selectedTime.ToString("HHmm00");
dateTime = date + "-" + time;
}
private void button1_Click(object sender, EventArgs e)
{
// 버튼 클릭 시 dateTime이 비어있지 않으면 작업 수행
if (!string.IsNullOrEmpty(dateTime))
{
DateTime selectedDateTime = DateTime.ParseExact(dateTime, "yyyyMMdd-HHmmss", null);
DateTime closestDateTime = DateTime.MinValue;
string closestFile = string.Empty;
// mkvFilesInDateTime 배열의 각 요소를 순회하면서 selectedDateTime과 비교하여 이전 시점의 가장 가까운 파일을 찾는다.
foreach (DateTime fileDateTime in mkvFilesInDateTime)
{
if (fileDateTime <= selectedDateTime)
{
if (fileDateTime > closestDateTime)
{
closestDateTime = fileDateTime;
closestFile = fileDateTime.ToString("yyyyMMdd-HHmmss") + ".mkv";
}
}
}
if (!string.IsNullOrEmpty(closestFile))
MessageBox.Show("가장 가까운 파일: " + closestFile);
else
MessageBox.Show("선택한 날짜와 시간보다 이전에 생성된 파일이 없습니다.");
}
else
{
MessageBox.Show("날짜와 시간을 선택해주세요.");
}
}
private void GetMkvFiles()
{
// 검색할 대상 폴더 경로 지정
string directoryPath = @".\Video";
// 문자열 앞에 @를 붙이면 이스케이프 시퀀스를 무시하고 문자열을 그대로 사용할 수 있다.
// 1. 이스케이프 시퀀스(\) 무시 (파일 경로에 유용)
// 보통 C# 문자열 안에서 백슬래시(\)는 이스케이프 문자로 쓰이기 때문에(\n, \t 등), 파일 경로를 적을 때 백슬래시를
// 두 번씩 적어줘야 한다. 하지만 @를 붙이면 백슬래시를 있는 그대로 인식한다.
// 2. 여러 줄(Multi-line) 문자열 작성
// @를 사용하면 \n이나 Environment.NewLine을 쓰지 않고도 엔터를 쳐서 여러 줄의 문자열을 그대로 작성할 수 있다.
// 경로가 존재하는지 확인
if (Directory.Exists(directoryPath))
{
// 지정된 폴더에서 .mkv 확장자를 가진 모든 파일의 전체 경로 배열을 가져온다.
mkvFiles = Directory.GetFiles(directoryPath, "*.mkv");
// 파일 목록을 TextBox에 출력
textBox1.Clear();
mkvFilesInDateTime = new DateTime[mkvFiles.Length];
for (int i = 0; i < mkvFiles.Length; i++)
{
// Path.GetFileName(file)를 사용하면 파일 이름(확장자 포함)을 가져올 수 있다.
mkvFiles[i] = Path.GetFileNameWithoutExtension(mkvFiles[i]);
// 파일 이름에서 날짜와 시간 부분을 추출하여 mkvFilesInDateTime 배열에 저장
mkvFilesInDateTime[i] = DateTime.ParseExact(mkvFiles[i], "yyyyMMdd-HHmmss", null);
textBox1.AppendText(mkvFiles[i] + Environment.NewLine);
}
}
else
{
MessageBox.Show("지정된 폴더를 찾을 수 없습니다.");
}
}
}
}
위 코드를 빌드하고 실행한다.



'C#' 카테고리의 다른 글
| [C#] Asynchronous Threading 비동기 스레딩 (0) | 2026.03.31 |
|---|---|
| [C#] 콘솔 프로그램 실행하고 결과 확인하기 (0) | 2026.03.28 |
| [C#] 언어, 지역, 문화에 따른 숫자, 날짜 등 데이터 표현 (0) | 2026.02.07 |
| [C#] 난수 생성, 배열 섞기, 리스트 컴프리헨션 (1) | 2025.12.30 |
| [C#] 파일 내용 읽고 한 줄씩 출력하기 (0) | 2025.12.29 |









