首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中计算时差并保存到mysql

问在C#中计算时差并保存到mysql
EN

Stack Overflow用户
提问于 2017-09-05 19:14:06
回答 1查看 1K关注 0票数 1

我被指派计算时差,只计算工作时间。经过搜索,我得到了这个(它有点葡萄牙语,但我认为这是可以理解的):

代码语言:javascript
复制
    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数据库。

它看起来很有效,但是当结果是48:00,而不是"48:00:00“时,它试图将其更新为"2.00:00:00”,这在mysql中是一个时间域。我真的不知道如何解决这个问题,到目前为止,我已经尝试将"horas“作为一个约会时间,然后将其格式化为正确的格式,但它没有起作用。

我真的很感谢你的帮助,如果很难理解的话,我很抱歉,只要问一问,我就试着进一步解释。

编辑:

在时间盘中添加包含小时数的浮动"horas“:

代码语言:javascript
复制
TimeSpan tempo = TimeSpan.FromHours(horas); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-05 19:27:34

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

它可能令人困惑,因为时间和间隔使用相同的表示法,但有不同的含义。如果是一天中的某个时间(“时间”或“时间戳”),则值'1:00‘是指1点钟。但同样的值意味着一个小时如果它是一个间隔。

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

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

如果您想使用支持间隔期的开放源码dbms,请查看PostgreSQL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46061862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档