文本框字符串无法识别为有效的DateTime

时间:2015-02-09 08:34:41

标签: c# parsing datetime textbox

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。

有人请解释一下。如何在军事时间内输入用户并使其正常工作。

5 个答案:

答案 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;

我显然试图做的比实际需要的多,所以通过一些简单的计算,问题就解决了。

感谢大家的帮助。