const double PERCENT = 0.25;
DateTime t1 = Convert.ToDateTime(txtB_StartT.Text);
DateTime t2 = Convert.ToDateTime(txtB_EndT.Text);
TimeSpan ts = t1.Subtract(t2);
我似乎无法将其解析为DateTime
double tsMin = Convert.ToDouble(ts);
double tsMinTot = ts.TotalMinutes;
short tsMinPercent = (short)(((double)tsMinTot) * PERCENT);
double tsAndPercentTot = tsMinPercent + tsMinTot;
我的目标是找到timediff,找到25%的timediff并将其添加到timediff中。
DateTime newTimeMinTot = Convert.ToDateTime(tsAndPercentTot);
int hours = newTimeMinTot.Hour;
int minutes = newTimeMinTot.Minute;
尝试获取计算的新日期时间
string newTimeStrg = string.Format("{0:d1}:{1:d2}", hours, minutes);
txtB_NewDelivT.Text = newTimeStrg;
尝试将新的DateTime输出到TextBox。
有人请解释一下。如何在军事时间内输入用户并使其正常工作。
答案 0 :(得分:2)
这样做:
const double PERCENT = 0.25;
DateTime t1 = Convert.ToDateTime(txtB_StartT.Text);
DateTime t2 = Convert.ToDateTime(txtB_EndT.Text);
TimeSpan ts = t1.Subtract(t2);
long tsMinPercent = ts.Ticks + (long)(ts.Ticks * PERCENT);
var tsAndPercentTot = TimeSpan.FromTicks(tsMinPercent);
string newTimeStrg = string.Format("{0:d1}:{1:d2}", tsAndPercentTot.Hours, tsAndPercentTot.Minutes);
txtB_NewDelivT.Text = newTimeStrg;
我在这里使用DateTime.Ticks
来计算差异时间的百分比,并使用TimeSpan.FromTicks
从计算的百分比DateTime再次查找DateTime
。
而是使用TextBox
,您可以使用TimePicker
。
答案 1 :(得分:0)
强制使用日期/日期时间格式
DateTime mydate = DateTime.ParseExact(TextBox1.Text.Trim(), "dd/MM/yyyy", null);
答案 2 :(得分:0)
根据您的评论,您所写的输入值为" 0945"和" 1445",我建议你用DateTimePicker控件替换你的TextBox控件。
只是为了让它们显示您现在正在做的值,您必须设置一些属性,因为我在这里向您展示。
picker.Format = DateTimePickerFormat.Custom;
picker.CustomFormat = "HHmm";
picker.ShowUpDown = true;
之后,picker.Value将返回一个完整的日期和时间,其中分钟和秒将类似于输入值。
您可以轻松设置属性'来自设计师的价值观。
的问候,
丹尼尔。
答案 3 :(得分:0)
由于我没有您的表单,我将省略UI交互。以下是解析输入流的方法。我将展示如何解析hh:mm格式以及hhmm格式:
var start = TimeSpan.ParseExact("10:00", "hh\\:mm", CultureInfo.InvariantCulture);
var finish = TimeSpan.ParseExact("1100", "hhmm", CultureInfo.InvariantCulture);
一旦你有了开始和结束,我们所要做的就是数学。我们将从ticks(TimeSpan上的最小测量单位)乘以我们的百分比(0.25)创建一个新的TimeSpan。然后我们只是将调整添加到我们的开始时间,我们就完成了!然后,您可以将其分配到需要输出的位置。
var diff = finish - start;
var adjustment = TimeSpan.FromTicks((long)(diff.Ticks * 0.25));
var adjustedStart = start + adjustment;
您可以在dotNetFiddle处运行代码。我已将输出包括在内,以便您可以看到中间结果。
答案 4 :(得分:-1)
好吧,我采取了不同的方法,并且相当容易。 我不确定我是否允许回答我自己的问题,但我认为 将帮助有同样问题的人。
// Set Constant values.
const double PERCENT = .25;
const int HUN_PART = 100, SIXTY = 60, one = 1;
// Parse start time textbox value as int
// Calculate start time hours and minutes
int sT = int.Parse(textBox1.Text);
int sH = sT / HUN_PART;
int sM = sT % HUN_PART;
// Calculate total start time in minutes
int sH_M = sH * SIXTY;
int sTotM = sH_M + sM;
// Parse end time textbox value as int
// Calculate end time hours and minutes
int eT = int.Parse(textBox2.Text);
int eH = eT / HUN_PART;
int eM = eT % HUN_PART;
// Calculate total end time in minutes
int eH_M = eH * SIXTY;
int eTotM = eH_M + eM;
// Calculate time difference in minutea
// Calculate percent of time difference
double dT_M = Convert.ToInt32(eTotM - sTotM);
int perc = Convert.ToInt32(dT_M * PERCENT);
// Calculate new arrival time in total min then in hours
double newD_M = perc + eTotM;
double newD_H = newD_M / SIXTY;
// Calculate new arrivaltime in remaining minutes
double nD_H_Convert = Math.Truncate(newD_H);
int nD_H = Convert.ToInt32(nD_H_Convert);
int nD_Hours = nD_H * HUN_PART;
double nD_Min = nD_H * SIXTY;
int nD_M = Convert.ToInt32(newD_M - nD_Min);
int newDeliveryTime = (nD_H * HUN_PART) + nD_M;
// Put values for new arive time hours and minutes in appropriate string format
string newTime = string.Format("{0:d4}", newDeliveryTime);
// Output arrival time string in textbox
textBox3.Text = newTime;
我显然试图做的比实际需要的多,所以通过一些简单的计算,问题就解决了。
感谢大家的帮助。