不同格式日期的总和。C#

浏览:29日期:2024-02-17
如何解决不同格式日期的总和。C#?

在中C#,提供了许多方法将包含多种格式的日期时间的字符串转换为统一DateTime对象。这些方法可以识别很多标准日期时间格式,如果您与它们不同,您甚至可以提供自己的格式。

DateTime.Parse()-将字符串转换为DateTime对象。如果操作失败,它将引发异常。DateTime.TryParse()- 仅在可能时 将字符串转换为DateTime对象。如果成功则返回,如果失败则返回。 __true``falseDateTime.TryParseExact()-将指定格式的字符串转换为DateTime对象。true如果成功则返回,false否则返回。

在您的情况下,您可以这样使用DateTime.TryParse()(DateTime.Parse()除非您绝对确定格式正确,否则建议使用简单的做法,而不是简单地使用它):

var dtStr1 = ' 2019. 09. 23. 14:54:23';var dtStr2 = '2019.09.23 14:54:23';var dtStr3 = '2019-09-23 14:54:23';DateTime.TryParse(dtStr1, out DateTime dt1);DateTime.TryParse(dtStr2, out DateTime dt2);DateTime.TryParse(dtStr3, out DateTime dt3);

一旦转换为DateTime对象,它就不再具有与之关联的格式。这是个structure,因此只有成员变量和方法。因此,要计算总时数等,可以使用提供的方法。

假设您要计算一天工作开始到结束之间的时间。您可以将它们转换为DateTime对象,然后从其他对象中减去一个对象,这将为您提供一个TimeSpam对象。

var dtStrStart = '2019.09.23 08:23:12';var dtStrEnd = '2019.09.23 16:17:28';DateTime.TryParse(dtStrStart, out DateTime dtStart);DateTime.TryParse(dtStrEnd, out DateTime dtEnd);var diff = dtEnd - dtStart;

现在TimeSpan,diff此处的对象将为您提供一堆具有小时,分钟等差异的属性。

的TimeSpan.Days,TimeSpan.Minutes等会给你在天,分钟等时间

Console.WriteLine(diff.Days);Console.WriteLine(diff.Hours);Console.WriteLine(diff.Minutes);Console.WriteLine(diff.Seconds);Console.WriteLine(diff.Milliseconds);

0

7

54

16

0

在TimeSpan.TotalMinutes等会给你在各个单元的整个时间段。

Console.WriteLine(diff.TotalDays);Console.WriteLine(diff.TotalHours);Console.WriteLine(diff.TotalMinutes);Console.WriteLine(diff.TotalSeconds);Console.WriteLine(diff.TotalMilliseconds);

0.329351851851852

7.90444444444444

474.266666666667

28456

28456000

相反,当您在数据库中存储数据时,必须再次使用标准格式,例如datetime或datetime2。

解决方法

我有个问题。我需要用代码总结在办公室工作的时间。我从SQL Server获得的日期没问题,但是我有不同的格式。例如: 2019. 09. 23.14 : 54 : 23,2019.09.23 14:54:232019-09-23 14:54:23 ;我想总结得出的工作时间。不管一年。这是示例:

try{ string betölt = 'SELECT * from munkaorak where'; if (cbTech.Text != '') {betölt += ' Munkaszam=’' + cbMunka.Text + '’ AND Részfolyamat=’' + cbRész.Text + '’ AND TechKod=’' + cbTech.Text + '’'; } else if (cbRész.Text != '') {betölt += ' Munkaszam=’' + cbMunka.Text + '’ AND Részfolyamat=’' + cbRész.Text + '’'; } else if(cbMunka.Text !='') {betölt += ' Munkaszam=’' + cbMunka.Text + '’'; } betölt += ' order by ID DESC'; MySqlCommand name = new MySqlCommand(betölt,kapcsolat); kapcsolat.Open(); olvasó = name.ExecuteReader(); int összora = 0; if (olvasó.HasRows) {while (olvasó.Read()){ if (olvasó.GetString(7) != 'Befejezés: ') {string[] aha = olvasó.GetString(6).Split(’ ’);string kezdes = aha[4];string[] kezd = kezdes.Split(’:’);int kezdoido = Convert.ToInt32(kezd[0]) * 60 * 60 + Convert.ToInt32(kezd[1]) * 60 + Convert.ToInt32(kezd[2]);int befejezoido = 0;string aha22 = '';if (olvasó.GetString(7).IndexOf(’-’) >= 0){ string[] aha2 = olvasó.GetString(7).Split(’ ’); string befejezes = aha2[1]; string[] bef = befejezes.Split(’:’); aha22 = aha2[0].Split(’-’)[2]; befejezoido = Convert.ToInt32(bef[0]) * 60 * 60 + Convert.ToInt32(bef[1]) * 60 + Convert.ToInt32(bef[2]);}else{ string[] aha2 = olvasó.GetString(7).Split(’ ’); string befejezes = aha2[4]; string[] bef = befejezes.Split(’:’); aha22 = aha2[3]; befejezoido = Convert.ToInt32(bef[0]) * 60 * 60 + Convert.ToInt32(bef[1]) * 60 + Convert.ToInt32(bef[2]);}string dolgozott = '';if (aha[3].Replace('.','') == aha22.Replace('.','')){ dolgozott = mpbolora(befejezoido - kezdoido); összora += befejezoido - kezdoido;}else{ dolgozott = mpbolora((86400 - kezdoido) + befejezoido); összora += (86400 - kezdoido) + befejezoido;}string validalo = '';try{ string[] validal = olvasó.GetString(9).Split(’ ’); validalo = validal[0] + ' ' + validal[1] + ' ' + validal[2] + validal[3] + validal[4] + ' ' + validal[5];}catch{ validalo = olvasó.GetString(9);}string munkafolyamat = olvasó.GetString(3) + '-' + olvasó.GetString(4) + '-' + olvasó.GetString(5);string[] sorok = { olvasó.GetString(2),dolgozott,olvasó.GetString(6).Replace('Kezdés: ',''),olvasó.GetString(7).Replace('Befejezés: ',olvasó.GetString(8),validalo,munkafolyamat };var lv = new ListViewItem(sorok);lvStat.Items.Add(lv); }} } else {kapcsolat.Close();MessageBox.Show('Nincs adat!','Figyelem'); } kapcsolat.Close(); lblÖssz.Text = 'Összesen ledolgozott órák: ' + mpbolora(összora);}catch (Exception a){ MessageBox.Show(a.Message); kapcsolat.Close();}kapcsolat.Close();

它可以正常工作,但是当出现不同格式时,由于-或空格而无法正常工作。请帮忙!

相关文章: