private void button1_Click(object sender, EventArgs e)
        {
            if (_camera == IntPtr.Zero)
            {
                return;
            }

            // Zone Setting
            var  selectedItem = comboBox1.SelectedIndex;
            uint timeZone     = (uint)_desc.PropDesc[selectedItem];

            if (_timeZone != timeZone)
            {
                uint err = EDSDKLib.EDSDK.EdsSetPropertyData(_camera, EDSDKLib.EDSDK.PropID_TimeZone, 0, sizeof(uint), timeZone);
            }
            _timeZone = timeZone;

            // Date / Time : (ex : 2019/09/12 09:11)
            string localTime = this.textBox1.Text;

            if (_localTime != localTime)
            {
                DateTime dateTime; DateTimeStyles dts = DateTimeStyles.None;
                var      culture = new System.Globalization.CultureInfo("ja-JP");
                string   format  = "yyyy/MM/dd HH:mm";
                if (DateTime.TryParseExact(localTime,
                                           format,
                                           culture,
                                           dts,
                                           out dateTime))
                {
                    // Time difference consideration
                    short    timeDiff = (short)(_timeZone & 0x0000ffff);
                    TimeSpan timeSpan = new TimeSpan(0, Convert.ToInt32(this.checkBox1.Checked), timeDiff, 0);
                    dateTime = dateTime.Subtract(timeSpan);
                    EDSDKLib.EDSDK.EdsTime edsDateTime = DateTime2EdsTime(dateTime);
                    uint err = EDSDKLib.EDSDK.EdsSetPropertyData(_camera, EDSDKLib.EDSDK.PropID_UTCTime, 0, Marshal.SizeOf(typeof(EDSDKLib.EDSDK.EdsTime)), edsDateTime);
                }
                else
                {
                    MessageBox.Show("Enter in the \"yyyy/MM/DD HH:mm\" format.");
                    this.DialogResult = DialogResult.None;
                }
            }

            // Daylight Saving Time
            if (_summerTimeSetting != this.checkBox1.Checked)
            {
                uint err = EDSDKLib.EDSDK.EdsSetPropertyData(_camera, EDSDKLib.EDSDK.PropID_SummerTimeSetting, 0, sizeof(uint), Convert.ToUInt32(this.checkBox1.Checked));
            }
        }
        private string EdsTime2StrTime(EDSDKLib.EDSDK.EdsTime edsTime)
        {
            string strTime = (edsTime.Year).ToString("D4") + "/" + edsTime.Month.ToString("D2") + "/" + edsTime.Day.ToString("D2") + " " + edsTime.Hour.ToString("D2") + ":" + edsTime.Minute.ToString("D2");

            return(strTime);
        }
        private DateTime EdsTime2DateTime(EDSDKLib.EDSDK.EdsTime edsTime)
        {
            DateTime dateTime = new DateTime(edsTime.Year, edsTime.Month, edsTime.Day, edsTime.Hour, edsTime.Minute, edsTime.Second, edsTime.Milliseconds);

            return(dateTime);
        }
        public DateTimeZoneSetting(ref CameraController controller)
        {
            map.Add(0x00000000, "None");
            map.Add(0x00000001, "Chatham Islands");
            map.Add(0x00000002, "Wellington");
            map.Add(0x00000003, "Solomon Islands");
            map.Add(0x00000004, "Sydney");
            map.Add(0x00000005, "Adelaide");
            map.Add(0x00000006, "Tokyo");
            map.Add(0x00000007, "Hong Kong");
            map.Add(0x00000008, "Bangkok");
            map.Add(0x00000009, "Yangon");
            map.Add(0x0000000A, "Dhaka");
            map.Add(0x0000000B, "Kathmandu");
            map.Add(0x0000000C, "Delhi");
            map.Add(0x0000000D, "Karachi");
            map.Add(0x0000000E, "Kabul");
            map.Add(0x0000000F, "Dubai");
            map.Add(0x00000010, "Tehran");
            map.Add(0x00000011, "Moscow");
            map.Add(0x00000012, "Cairo");
            map.Add(0x00000013, "Paris");
            map.Add(0x00000014, "London");
            map.Add(0x00000015, "Azores");
            map.Add(0x00000016, "Fernando");
            map.Add(0x00000017, "Sao Paulo");
            map.Add(0x00000018, "Newfoundland");
            map.Add(0x00000019, "Santiago");
            map.Add(0x0000001A, "Caracas");
            map.Add(0x0000001B, "New York");
            map.Add(0x0000001C, "Chicago");
            map.Add(0x0000001D, "Denver");
            map.Add(0x0000001E, "Los Angeles");
            map.Add(0x0000001F, "Anchorage");
            map.Add(0x00000020, "Honolulu");
            map.Add(0x00000021, "Samoa");
            map.Add(0x00000022, "Riyadh");
            map.Add(0x00000023, "Manaus");
            map.Add(0x00000100, "UTC");
            map.Add(0xffffffff, "unknown");

            _controller = controller;
            _camera     = _controller.GetModel().Camera;

            InitializeComponent();

            // Date / Time
            EDSDKLib.EDSDK.EdsTime utcTime = default(EDSDKLib.EDSDK.EdsTime);
            if (_camera != IntPtr.Zero)
            {
                uint err = EDSDKLib.EDSDK.EdsGetPropertyData(_camera, EDSDKLib.EDSDK.PropID_UTCTime, 0, out utcTime);

                // Zone Setting
                err = EDSDKLib.EDSDK.EdsGetPropertyData(_camera, EDSDKLib.EDSDK.PropID_TimeZone, 0, out _timeZone);

                _desc = new EDSDKLib.EDSDK.EdsPropertyDesc();
                err   = EDSDKLib.EDSDK.EdsGetPropertyDesc(_camera, EDSDKLib.EDSDK.PropID_TimeZone, out _desc);

                this.comboBox1.Items.Clear();

                for (int i = 0; i < _desc.NumElements; i++)
                {
                    string outString;
                    bool   isGet = map.TryGetValue((uint)_desc.PropDesc[i] >> 16, out outString);
                    if (isGet && !outString.Equals("unknown"))
                    {
                        // Create list of combo box
                        comboBox1.Items.Add(outString);
                        if (_timeZone == _desc.PropDesc[i])
                        {
                            // Select item of combo box
                            comboBox1.SelectedIndex = i;
                            _timeZone     = (uint)_desc.PropDesc[i];
                            _timeZonePrev = _timeZone;
                        }
                    }
                }

                // Daylight Saving Time
                uint summerTimeSetting;
                err = EDSDKLib.EDSDK.EdsGetPropertyData(_camera, EDSDKLib.EDSDK.PropID_SummerTimeSetting, 0, out summerTimeSetting);
                if (summerTimeSetting == 0x01)
                {
                    this.checkBox1.Checked = true;
                }
                _summerTimeSetting     = this.checkBox1.Checked;
                _summerTimeSettingPrev = _summerTimeSetting;

                // Time difference consideration
                DateTime dateTime = EdsTime2DateTime(utcTime);
                short    timeDiff = (short)(_timeZone & 0x0000ffff);
                TimeSpan timeSpan = new TimeSpan(0, Convert.ToInt32(this.checkBox1.Checked), timeDiff, 0);
                dateTime = dateTime.Add(timeSpan);
                utcTime  = DateTime2EdsTime(dateTime);

                _localTime         = EdsTime2StrTime(utcTime);
                _localTimePrev     = _localTime;
                this.textBox1.Text = _localTime;
            }
        }