如何计算总时差 [英] How to calculate total time difference

查看:136
本文介绍了如何计算总时差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨frds,

我想计算开始日期和时间以及结束日期和时间之间的总时差。

开始日期:17-02-2016

开始时间:01:00 AM

结束日期:18-02-2016

结束时间:11:00



我该怎么办?在此先感谢。



我尝试过:



 DateTime dt = Convert.ToDateTime(结束日期); 
DateTime dt1 = Convert.ToDateTime(开始日期);
TimeSpan t = dt - dt1;
double NrOfDays = t.TotalDays;
double d1 = NrOfDays * 24 ;
TimeSpan ts = Convert.ToDateTime(End Time).Subtract(Convert.ToDateTime(start time));
TimeSpan time1 = TimeSpan.FromHours(d1);
var ts2 = ts.Add(time1);
textbox1.Text = ts2;

解决方案

注意:此处显示的代码取代小时/分钟/秒/毫秒使用TimeSpan值的DateTime值,而不是将TimeSpan值添加到DateTime值。 添加值当然要简单得多。



显示的代码永远不会编译。代码中的混淆程度表明您需要关注/回顾使用C#的基础知识,并使用'DateTime和'TimeSpan对象。我建议你下载Charles Petzold的免费书Dot Net Zero(在线下载,只需查阅)和学习。



你的任务可以是定义为:



a。从您拥有的日期和时间数据中组合两个DateTime对象:

  var  d1 = DateTime.Parse(startDate); 
var t1 = TimeSpan.Parse(startTime);

var d2 = DateTime.Parse(endDate);
var t2 = TimeSpan.Parse(endTime);

var d3 = new DateTime(d1.Year,d1.Month, d1.Day,t1.Hours,t1.Minutes,t1.Seconds,t1.Milliseconds);
var d4 = new DateTime(d2.Year,d2.Month,d2.Day, t2.Hours,t2.Minutes,t2.Seconds,t2.Milliseconds);

// 获取两个日期之间的差异
< span class =code-keyword> var tspan = d4 - d3;

// 在'tspan 您需要考虑以下几个重要事项:



a。如果字符串数据不好怎么办:你应该使用'outParse for DateTime和TimeSpan'和'out参数,如果转换失败则抛出错误;像这样:

 DateTime dt1; 

if (!DateTime.TryParse(startDate, out dt1))< span class =code-keyword> throw new ArgumentException( 无效的开始日期);

// 好的,有效的日期时间在'dt1

湾当你使用TimeSpan来表示与DateTime中的时刻相对应的基准时,而不是某个数量时间的持续时间时,你应该意识到这有点不寻常。



c。如果开始日期/时间比结束日期/时间晚,则此处显示的示例代码将返回否定结果。这就是你想要的吗?



d。你是如何处理日期和时间的单独数据的?这有点不寻常;如果你可以在一次访问操作中获得完整的DateTime,你可以保存自己解析TimeSpan字符串。


这是基于你上面的内容的完整代码

  var  StartDate =   17-02-2016\" ; 
var StartTime = 01:00 AM ;
var EndDate = 18-02- 2016\" ;
var EndTime = 11:00 AM ;

DateTime dta = DateTime.ParseExact(EndDate, dd-MM-yyyy,CultureInfo.GetCultureInfo( en-us));
DateTime dt11 = DateTime.ParseExact(StartDate, dd-MM-yyyy,CultureInfo .GetCultureInfo( en-us));
TimeSpan tt = dta - dt11;
double NrOfDays = tt.TotalDays;
double d1 = NrOfDays * 24 ;
TimeSpan ts = Convert.ToDateTime(EndTime).Subtract(Convert.ToDateTime(StartTime));
TimeSpan time1 = TimeSpan.FromHours(d1);
var ts2 = ts.Add(time1);
var valuee = ts2;


Hi frds,
I want to calculate total time difference between start date and time and End date and time.
Start Date:17-02-2016
Start Time:01:00AM
End Date:18-02-2016
End Time:11:00AM

how can I do this. Thanks in advance.

What I have tried:

DateTime dt =Convert.ToDateTime(End Date);
DateTime dt1 =Convert.ToDateTime(Start Date);
TimeSpan t = dt - dt1;
double NrOfDays = t.TotalDays;
double d1 = NrOfDays * 24;
TimeSpan ts = Convert.ToDateTime(End Time).Subtract(Convert.ToDateTime(start time));
TimeSpan time1 = TimeSpan.FromHours(d1);
var ts2 = ts.Add(time1);
textbox1.Text = ts2;

解决方案

Note: the code shown here replaces the Hours/Minutes/Seconds/Milliseconds of the DateTime values with the TimeSpan values, rather than adding the TimeSpan values to the DateTime values. 'Adding the values, is, of course, much simpler.

Your code shown will never compile. The level of confusion in the code suggests you need to focus/review the fundamentals of using C#, and using the 'DateTime and 'TimeSpan objects. I suggest you download the free book "Dot Net Zero" by Charles Petzold (on-line download, just look it up), and study.

Your task can be defined as:

a. compose two DateTime objects from the date and time data you have:

var d1 = DateTime.Parse(startDate);
var t1 = TimeSpan.Parse(startTime);

var d2 = DateTime.Parse(endDate);
var t2 = TimeSpan.Parse(endTime);

var d3 = new DateTime(d1.Year, d1.Month, d1.Day, t1.Hours, t1.Minutes, t1.Seconds, t1.Milliseconds);
var d4 = new DateTime(d2.Year, d2.Month, d2.Day, t2.Hours, t2.Minutes, t2.Seconds, t2.Milliseconds);

// get the difference between the two dates
var tspan = d4 - d3;

// do something with the result in 'tspan

There are several important things you need to think about:

a. what if the string data is bad: you should use 'TryParse for both DateTime and TimeSpan with an 'out parameter, and throw errors if the conversion fails; like this:

DateTime dt1;

if(! DateTime.TryParse(startDate, out dt1)) throw new ArgumentException("invalid Start Date");

// okay, valid DateTime in 'dt1

b. when you use a TimeSpan to represent a "datum" that corresponds to a "moment" in a DateTime, rather than a "duration" of some "quantity" of time, you should be aware that's a bit unusual.

c. the example code shown here will return a negative result if the start date/time is "later" than the end date/time. is that what you want ?

d. how is that you are dealing with separate data for the date, and the time ? that's a bit unusual; if you can get the full DateTime in one access operation, you can save yourself parsing TimeSpan strings.


This is the full code based on what you have above

var StartDate = "17-02-2016";
          var StartTime = "01:00AM";
          var EndDate = "18-02-2016";
          var EndTime = "11:00AM";

          DateTime dta = DateTime.ParseExact(EndDate, "dd-MM-yyyy", CultureInfo.GetCultureInfo("en-us"));
          DateTime dt11 = DateTime.ParseExact(StartDate, "dd-MM-yyyy", CultureInfo.GetCultureInfo("en-us"));
          TimeSpan tt = dta - dt11;
          double NrOfDays = tt.TotalDays;
          double d1 = NrOfDays * 24;
          TimeSpan ts = Convert.ToDateTime(EndTime).Subtract(Convert.ToDateTime(StartTime));
          TimeSpan time1 = TimeSpan.FromHours(d1);
          var ts2 = ts.Add(time1);
          var valuee = ts2;


这篇关于如何计算总时差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆