示例#1
0
/**
 Set the current time zone
 @param const int timezone Time zone value to set in minutes. Verify: localtime = UTC + timezone
 @return bool true if successfull, false if errors (see CGErrorMgr::GetLastWinMsg())
 **/
bool CTime::SetTimeZone(const int timezone)
{
#ifdef WIN32
	TIME_ZONE_INFORMATION tzi;
	if (GetTimeZoneInformation(&tzi) == TIME_ZONE_ID_INVALID)
		return false;
	tzi.Bias = -(long)(timezone);
	if (!SetTimeZoneInformation(&tzi))
		return false;
	return true;
#else
	if (system("tzselect > /var/tmp/tz_out.txt") != 0) {
		return false;
	}
	FILE *f;
	CString zonename;
	if ((f = fopen("/var/tmp/tz_out.txt", "r"))) {
		char buffer[128];
		//unsigned long len, cnt = 0;
		if ( fscanf(f, "%s", buffer) != 1)
		{
			fclose (f);
			return false;
		}
		zonename = buffer;
		fclose (f);
	} else {
		return false;
	}

	return SetTimeZoneName(zonename);
#endif
}
示例#2
0
/* Property page dialog callback */
INT_PTR CALLBACK
DateTimePageProc(HWND hwndDlg,
         UINT uMsg,
         WPARAM wParam,
         LPARAM lParam)
{
    SYSTEMTIME st;
    GetLocalTime(&st);

    switch (uMsg)
    {
        case WM_INITDIALOG:
            FillMonthsComboBox(GetDlgItem(hwndDlg,
                                          IDC_MONTHCB));

            SetTimer(hwndDlg, ID_TIMER, 1000, NULL);

            /* Set range and current year */
            SendMessageW(GetDlgItem(hwndDlg, IDC_YEAR), UDM_SETRANGE, 0, MAKELONG ((short) 9999, (short) 1900));
            SendMessageW(GetDlgItem(hwndDlg, IDC_YEAR), UDM_SETPOS, 0, MAKELONG( (short) st.wYear, 0));

            pOldWndProc = (WNDPROC) SetWindowLongPtrW(GetDlgItem(hwndDlg, IDC_TIMEPICKER), GWL_WNDPROC, (INT_PTR) DTPProc);
            break;

        case WM_TIMER:
            SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPICKER), DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM) &st);
            break;

        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case IDC_MONTHCB:
                    if (HIWORD(wParam) == CBN_SELCHANGE)
                    {
                        ChangeMonthCalDate(GetDlgItem(hwndDlg,
                                                      IDC_MONTHCALENDAR),
                                                      (WORD) -1,
                                                      GetCBSelectedMonth((HWND)lParam),
                                                      (WORD) -1);
                    }
                    break;
            }
            break;

        case WM_CTLCOLORSTATIC:
            if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_YEARTEXT))
                return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);
            break;

        case WM_NOTIFY:
        {
            LPNMHDR lpnm = (LPNMHDR)lParam;

            switch (lpnm->idFrom)
            {
                case IDC_YEAR:
                    switch (lpnm->code)
                    {
                        case UDN_DELTAPOS:
                        {
                            SHORT wYear;
                            LPNMUPDOWN updown = (LPNMUPDOWN)lpnm;
                            wYear = (SHORT)SendMessageW(GetDlgItem(hwndDlg, IDC_YEAR), UDM_GETPOS, 0, 0);
                            /* Enable the 'Apply' button */
                            PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
                            ChangeMonthCalDate(GetDlgItem(hwndDlg,
                                               IDC_MONTHCALENDAR),
                                               (WORD) -1,
                                               (WORD) -1,
                                               (WORD) (wYear + updown->iDelta));
                        }
                        break;
                    }
                    break;

                case IDC_TIMEPICKER:
                    switch (lpnm->code)
                    {
                        case DTN_DATETIMECHANGE:
                            /* Stop the timer */
                            KillTimer(hwndDlg, ID_TIMER);

                            /* Tell the clock to stop ticking */
                            SendDlgItemMessageW(hwndDlg, IDC_CLOCKWND, CLM_STOPCLOCK,
                                                0, 0);

                            /* Enable the 'Apply' button */
                            PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
                            break;
                    }
                    break;

                case IDC_MONTHCALENDAR:
                    switch (lpnm->code)
                    {
                        case MCCN_SELCHANGE:
                            /* Enable the 'Apply' button */
                            PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
                            break;

                        case MCCN_AUTOUPDATE:
                            AutoUpdateMonthCal(hwndDlg,
                                                 (PNMMCCAUTOUPDATE)lpnm);
                            break;
                    }
                    break;

                default:
                    switch (lpnm->code)
                    {
                        case PSN_SETACTIVE:
                            SetTimeZoneName(hwndDlg);
                            break;

                        case PSN_APPLY:
                            SetLocalSystemTime(hwndDlg);
                            SetTimer(hwndDlg, ID_TIMER, 1000, NULL);

                            /* Tell the clock to start ticking */
                            SendDlgItemMessageW(hwndDlg, IDC_CLOCKWND, CLM_STARTCLOCK,
                                                0, 0);
                            return TRUE;
                    }
                    break;
            }
        }
        break;

        case WM_TIMECHANGE:
            /* FIXME: We don't get this message as we're not a top-level window... */
            SendMessageW(GetDlgItem(hwndDlg,
                                    IDC_MONTHCALENDAR),
                         MCCM_RESET,
                         0,
                         0);
            break;

        case WM_DESTROY:
            KillTimer(hwndDlg, ID_TIMER);
            break;
    }

    return FALSE;
}