|
VC++ ATL 中仅获取时间部分(小时:分钟:秒)
在 VC++ ATL 中仅获取时间部分(小时:分钟:秒),可通过以下步骤实现:
1. 设置控件仅显示时间
在对话框资源编辑器中:
选择 DateTimePicker 控件
属性窗口设置 Format 为 Time(或 HH:mm:ss 格式)
cpp
Copy Code
// 或在代码中设置格式:
m_TimeCtrl.SetFormat(_T("HH':'mm':'ss")); // 设置仅显示时分秒格式:ml-citation{ref="4,5" data="citationList"}
2. 获取时间值并提取时间部分
// 方法一:使用 COleDateTime
COleDateTime dt;
if(m_TimeCtrl.GetTime(dt) == GDT_VALID) // 验证获取成功:ml-citation{ref="5" data="citationList"}
{
int nHour = dt.GetHour(); // 获取小时 (0-23)
int nMinute = dt.GetMinute(); // 获取分钟 (0-59)
int nSecond = dt.GetSecond(); // 获取秒数 (0-59)
CString strTime;
strTime.Format(_T("%02d:%02d:%02d"), nHour, nMinute, nSecond);
// 输出示例:"14:05:30"
}
// 方法二:使用 SYSTEMTIME
SYSTEMTIME st;
if(m_TimeCtrl.GetTime(&st) == GDT_VALID) // 验证获取成功:ml-citation{ref="8" data="citationList"}
{
CString strTime;
strTime.Format(_T("%02d:%02d:%02d"),
st.wHour, // 小时 (0-23)
st.wMinute, // 分钟 (0-59)
st.wSecond); // 秒数 (0-59)
}
关键注意事项
日期部分处理:
当控件设为仅显示时间时,获取的日期部分(年/月/日)为系统当前日期,需忽略此部分数据
时间格式符号:
HH:24小时制小时(00-23)
mm:分钟(00-59)
ss:秒(00-59)
tt:AM/PM 标记(如用12小时制)
线程安全:
时间控件操作需在 GUI 线程执行,跨线程访问需使用 PostMessage 通知主线程
完整示例(在按钮事件中获取时间):
void CYourDialog::OnBtnGetTime()
{
CString strTime;
SYSTEMTIME st;
if(m_TimeCtrl.GetTime(&st) == GDT_VALID) {
strTime.Format(_T("当前设置时间:%02d:%02d:%02d"),
st.wHour, st.wMinute, st.wSecond);
SetDlgItemText(IDC_STATIC_TIME, strTime); // 显示到静态文本
}
}
|
|