繁体   English   中英

计算C#中的时差并保存到mysql

[英]Calculating time difference in C# and saving to mysql

我被分配了只计算工作时间来计算时间差的任务。 搜索后,我能够得到它(这在葡萄牙语中有点,但是我认为这是可以理解的):

    if (!txt_data2.Text.Contains("_") && !string.IsNullOrEmpty(txt_data2.Text) && txt_data2.Text != null && !txt_hora2.Text.Contains("_") && !string.IsNullOrEmpty(txt_hora2.Text) && txt_hora2.Text != null)
            {
                TimeSpan hi = TimeSpan.Parse(txt_horainicio.Text);
                TimeSpan hf = TimeSpan.Parse(txt_hora2.Text);

                if (hi.Hours < 9 || hf.Hours > 18)
                {
                    MessageBox.Show("Horas Inválidas");
                }

                else
                {
                    if (MessageBox.Show("Inserir horas extraordinárias?", "Horas Extraordinárias", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        double extra;
                        TimeSpan horasextra;

                        Frm_Tempo frm1 = new Frm_Tempo();

                        if (frm1.ShowDialog() == DialogResult.OK)
                        {
                            horasextra = TimeSpan.Parse(frm1.txt_horasextra.Text);
                            extra = horasextra.TotalHours;

                            DateTime data1 = Convert.ToDateTime(txt_datainicio.Text);
                            TimeSpan hora1 = TimeSpan.Parse(txt_horainicio.Text);
                            DateTime dataentrega1 = Convert.ToDateTime(txt_data2.Text);
                            TimeSpan horaentrega1 = TimeSpan.Parse(txt_hora2.Text);

                            data1 = data1.Add(hora1);
                            dataentrega1 = dataentrega1.Add(horaentrega1);

                            double horas1 = 0;
                            double minutos1 = 0;

                            for (var i = data1; i < dataentrega1; i = i.AddMinutes(1))
                            {
                                if (i.DayOfWeek != DayOfWeek.Saturday && i.DayOfWeek != DayOfWeek.Sunday)
                                {
                                    if (i.TimeOfDay.Hours >= 9 && i.TimeOfDay.Hours <= 18)
                                    {
                                        if (i.TimeOfDay.Hours >= 13 && i.TimeOfDay.Hours < 14)
                                        {

                                        }

                                        else
                                        {
                                            minutos1++;

                                            for (var x = data1; x < dataentrega1; x = x.AddHours(1))
                                            {
                                                horas1 = (minutos1 / 60) + extra;
                                            }
                                        }
                                    }
                                }
                            }

                            TimeSpan tempo1 = TimeSpan.FromHours(horas1);

                            MySqlCommand UPDATE20 = new MySqlCommand("UPDATE tbl_orcamentos SET tempo ='" + tempo1 + "'WHERE id ='" + txt_cod.Text + "'", ligar);
                            UPDATE20.ExecuteNonQuery();
                        }
                    }

                    else
                    {
                        DateTime data = Convert.ToDateTime(txt_datainicio.Text);
                        TimeSpan hora = TimeSpan.Parse(txt_horainicio.Text);
                        DateTime dataentrega = Convert.ToDateTime(txt_data2.Text);
                        TimeSpan horaentrega = TimeSpan.Parse(txt_hora2.Text);

                        data = data.Add(hora);
                        dataentrega = dataentrega.Add(horaentrega);

                        float horas = 0;
                        float minutos = 0;

                        for (var i = data; i < dataentrega; i = i.AddMinutes(1))
                        {
                            if (i.DayOfWeek != DayOfWeek.Saturday && i.DayOfWeek != DayOfWeek.Sunday)
                            {
                                if (i.TimeOfDay.Hours >= 9 && i.TimeOfDay.Hours < 18)
                                {
                                    if (i.TimeOfDay.Hours >= 13 && i.TimeOfDay.Hours < 14)
                                    {

                                    }

                                    else
                                    {
                                        minutos++;

                                        for (var x = data; x < dataentrega; x = x.AddHours(1))
                                        {
                                            horas = minutos / 60;
                                        }
                                    }
                                }
                            }
                        }

                        TimeSpan tempo = TimeSpan.FromHours(horas);                    

                        MySqlCommand UPDATE21 = new MySqlCommand("UPDATE tbl_orcamentos SET tempo ='" + tempo + "'WHERE id ='" + txt_cod.Text + "'", ligar);
                        UPDATE21.ExecuteNonQuery();
                    }
                }
            }

我正在使用c#和mysql数据库。

它似乎可以工作,但是当结果是48h而不是“ 48:00:00”时,它正在尝试将其更新为“ 2.00:00:00”,这对于“ tempo”无效,它是mysql中的一个时间字段。 我真的不知道如何解决它,到目前为止,我试图将“ horas”设置为日期时间,然后将其格式化为正确的格式,但是它没有用。

非常感谢您的帮助,如果很难理解,请问问,我将尽力解释。

编辑:

将包含小时数的浮点数“ horas”添加到Timespan中:

TimeSpan tempo = TimeSpan.FromHours(horas); 

时差的标准SQL数据类型为“间隔”。 MySQL不支持“间隔”数据类型。

这可能会造成混淆,因为一天中的时间和间隔使用相同的符号,但含义不同。 如果是一天中的某个时间(“时间”或“时间戳记”),则值“ 1:00”表示1点。 但是相同的值表示间隔一个小时。

另外,“ 48:00:00”是有效间隔(48小时),但不是一天中的有效时间。

如果您使用的是MySQL,请以整数形式计算和存储间隔,以表示小时数,分钟数或秒数以及显示格式。 例如,根据应用程序的要求,将两个小时存储为整数7200(秒)或整数120(分钟)。 将该整数格式化为“ 2:00”以进行显示。 C#的TimeSpan.FromMinutesTimeSpan.FromSeconds将有所帮助。

如果要使用支持间隔的开放源dbms,请查看PostgreSQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM