如何计算两个日期之间的金额 [英] how to calculate amount between 2 dates

查看:81
本文介绍了如何计算两个日期之间的金额的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨 如何计算两个日期之间的金额:
一个日期是StartDate,编码一个是EndDate.所以我想计算它们之间的天数,如果用户选择日期有误,则抛出异常.例如EndDate应该在StartDate之后,等等.
然后计算它们之间的金额,并在与2个日期匹配的文本框中显示.
请帮助

解决方案

这将是一个复杂的解决方案,
我已经在主窗体上创建了带有三个控件的Windows Form应用程序.

DateTimePicker1用于选择StartDate
DateTimePicker2用于选择EndDate
用于显示NumberOfDays的文本框

我选择DateTimePicker控件来选择日期,因为该控件具有max和min date属性,这使我可以防止输入日期出现输入错误.通过控制两个控件的min和max属性,不会出现这样的错误:"EndDate的选定值小于StartDate".
同样也不需要检查输入值的日期格式.它们是相同的,并且用户在输入日期值时不会出错.


现在的代码:

首先,我声明了三个变量,并设置了控件的初始值.
DateTimePicker2的最小值是DateTimePicker1的当前值,因此用户无法选择EndDate的值小于StartDate.

 /*  
 *由SharpDevelop创建.
 *用户:PerićŽeljko
 *日期:2012年3月9日
 *时间:10:47
 *
 */
使用系统;
使用 System.Collections.Generic;
使用使用System.Drawing;
使用使用System.Windows.Forms;
命名空间 Number_of_days_between_two_dates
{
///  <  > 
 ///  MainForm的描述.
 ///  <  /summary  > 
 公共 部分  MainForm : 形式
{
//  
// 变量声明
//  
 public  DateTime StartDate;
 public  DateTime EndDate;
公共 TimeSpan NumberOfDays;

公共 MainForm()
{
//  
// 调用InitializeComponent()对于
                        //  Windows窗体设计器支持.
//  
InitializeComponent();

//  
// 设置初始日期
//  
StartDate = dateTimePicker1.Value;
EndDate = StartDate;
dateTimePicker2.MinDate = EndDate;
                        textBox1.Text = " 
} 



事件处理:

DateTimePicker可以通过多种方式更改其值,我选择处理与之相关的两个事件.

DateTimePickerCloseUp是当用户单击控件,打开日历,单击日期并关闭日历时发生的事件.
DateTimePicker1CloseUp和DateTimePicker2CloseUp之间是有区别的.
区别体现在以下事实上:当用户在DateTimePicker1(StartDate)中选择日期时,需要将DateTimePicker2中的最小日期设置为StartDate,从而使用户无法在选择EndDate时犯错误.
他不能选择小于EndDate的值,而不能小于StartDate的值.

看一下代码:


  void  DateTimePicker1CloseUp( 用户选择发件人时,EventArgs e)
{
  //  
  当用户从控件中选择日期时,发生// 事件
  // 通过打开,选择和关闭控件
  //  
  StartDate = dateTimePicker1.Value;
  EndDate = StartDate;
  dateTimePicker2.MinDate = EndDate;
  dateTimePicker2.Value = EndDate;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "  +
                            NumberOfDays.TotalDays.ToString();
}

无效 DateTimePicker2CloseUp(对象发​​送者,EventArgs e)
{
  //  
  当用户从控件中选择日期时,发生// 事件
  // 通过打开,选择和关闭控件
  //  
  StartDate = dateTimePicker1.Value;
  EndDate = dateTimePicker2.Value;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "  +
                             NumberOfDays.TotalDays.ToString();
} 



第二个事件是DateTimePickerValueChaged,当用户在控件中输入StartDate和EndDate的新值时发生.
事件处理程序中的代码是相同的:

  void  DateTimePicker1ValueChanged( object 发​​送者,EventArgs e)
{
  //  
  当用户更改日期时发生// 事件
  // 通过输入日期的新值
  //  
  StartDate = dateTimePicker1.Value;
  EndDate = StartDate;
  dateTimePicker2.MinDate = EndDate;
  dateTimePicker2.Value = EndDate;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "  +
                             NumberOfDays.TotalDays.ToString();
}

无效 DateTimePicker2ValueChanged(对象发​​送者,EventArgs e)
{
  //  
  当用户从控件更改日期时,发生// 事件
  // 通过输入日期的新值
  //  
  StartDate = dateTimePicker1.Value;
  EndDate = dateTimePicker2.Value;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "  +
                             NumberOfDays.TotalDays.ToString();
} 



现在,当用户在DateTimePicker中更改值时,将自动重新计算两个日期之间的天数,并且文本框始终具有最新结果.
如果您想了解有关日期和时间的其他信息,请检查以下网址:


http://MSDN日期和时间 [ if (txtYourDate < StartDate&&&txt; ourDate > EndDate) { // 显示消息日期应在开始日期和结束日期之间 } 如果(StartDate > EndDate) { // 显示消息StartDate不应大于结束日期 } 如果(结束日期< StartDate) { // 显示消息EndDate不应小于开始日期 } 如果(txtYourDate > = StartDate&&&txt; ourDate < =结束日期) { // 在此处计算天数 // 计算金额 }


希望您能通过这种逻辑得到一个想法


 TimeSpan ts = endDate.Subtract(startDate); 


hi how to calculate amount between 2 dates:
one date is StartDate,secode one is EndDate.so i want to calculate days between them and if user has mistake to choose date,threw the exception.for example EndDate should be after StartDate and etc...
then calculate amount between them and show in a textbox which is match with 2 dates.
please help

This would be complex solution,
I have created Windows Form application with three controls on main form.

DateTimePicker1 for selecting StartDate
DateTimePicker2 for selecting EndDate
TextBox for displaying NumberOfDays

I have chosen DateTimePicker control for selecting dates because this control have property for max and min date , that gives me possibility to prevent entry errors in entered dates. By controling min and max property of both controls there can not be error like this : "Selected value for EndDate is less than StartDate".
Also there won''t be need for checking date format of entered values.They are the same, and user can not make mistake while entering values of dates.


Now the code :

At the start I have declared three variables , and set inital values of controls.
Min value of DateTimePicker2 is the current value of DateTimePicker1, so ther is no way that user select value for the EndDate less than StartDate.

/*
 * Created by SharpDevelop.
 * User: Perić Željko
 * Date: 09.03.2012
 * Time: 10:47
 * 
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace Number_of_days_between_two_dates
{
	/// <summary>
	/// Description of MainForm.
	/// </summary>
	public partial class MainForm : Form
	{
		//
		// declaration of variables
		//
		public DateTime StartDate;
		public DateTime EndDate;
		public TimeSpan NumberOfDays;
		
		public MainForm()
		{
			//
			// The InitializeComponent() call is required for
                        // Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// Set initial dates
			//
			StartDate = dateTimePicker1.Value;
			EndDate = StartDate;
			dateTimePicker2.MinDate = EndDate;
                        textBox1.Text = ""
		}



Event Handling :

DateTimePicker can change its value in many ways , I have chosen to handle two events that relates to that.

DateTimePickerCloseUp is event that happens when user clicks control , opens calendar , clicks on date and closes calendar.
There is difference between DateTimePicker1CloseUp and DateTimePicker2CloseUp.
The difference is reflected in the fact that when user selects date in DateTimePicker1 (StartDate), there is need to set min date in DateTimePicker2 to StartDate , so that user is disabled to make mistake when selecting EndDate.
He can''t select value for EndDate less then value of StartDate.

Look the code:


void DateTimePicker1CloseUp(object that when user selects  sender, EventArgs e)
{
  //
  // event happens when user selects date from control
  // by opening , selecting and closing control
  //
  StartDate = dateTimePicker1.Value;
  EndDate = StartDate;
  dateTimePicker2.MinDate = EndDate;
  dateTimePicker2.Value = EndDate;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "Number of days between two dates is " + 
                            NumberOfDays.TotalDays.ToString();
}
		
void DateTimePicker2CloseUp(object sender, EventArgs e)
{
  //
  // event happens when user selects date from control
  // by opening , selecting and closing control
  //
  StartDate = dateTimePicker1.Value;
  EndDate = dateTimePicker2.Value;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "Number of days between two dates is " + 
                             NumberOfDays.TotalDays.ToString();
}



The second event is DateTimePickerValueChaged , that happens when user type in new value for StartDate and EndDate in controls.
The code inside event handlers is the same :

void DateTimePicker1ValueChanged(object sender, EventArgs e)
{
  //
  // event happens when user changes date
  // by typing in new value for date
  //
  StartDate = dateTimePicker1.Value;
  EndDate = StartDate;
  dateTimePicker2.MinDate = EndDate;
  dateTimePicker2.Value = EndDate;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "Number of days between two dates is " + 
                             NumberOfDays.TotalDays.ToString();
}
		
void DateTimePicker2ValueChanged(object sender, EventArgs e)
{
  //
  // event happens when user changes date from control
  // by typing in new value for date
  //
  StartDate = dateTimePicker1.Value;
  EndDate = dateTimePicker2.Value;
  NumberOfDays = EndDate.Subtract(StartDate);
  textBox1.Text = "Number of days between two dates is " + 
                             NumberOfDays.TotalDays.ToString();
}



Now when user changes values in DateTimePicker controls the recalculation of number of days in between two dates is automatic, and the text box always have the latest result.
If you want to learn something else about Date and Time check this url :


http://MSDN Date and Time[^]


All the best,
Perić Željko


if (txtYourDate < StartDate && txtYourDate > EndDate)
{
    //Show Message Date should be in between startdate and enddate
}
if(StartDate > EndDate)
{
    //Show message StartDate should not be greater than enddate
}
if(EndDate < StartDate)
{
    //Show message EndDate should not be less than startdate
}
if(txtYourDate >= StartDate && txtYourDate <= EndDate)
{
    //Calculate Here Number of days
    //Calculate Amount
}


Hope u got an idea through this logic


TimeSpan ts = endDate.Subtract(startDate);


这篇关于如何计算两个日期之间的金额的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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