-3

让用户以下午 3:30 的格式输入到达时间,然后询问用户需要多长时间才能到达目的地。然后我需要显示他们需要离开的时间才能准时到达目的地。

到目前为止我有这个

Console.WriteLine("Enter the arrival time <e.g. 3:30 PM>:");
DateTime time = Convert.ToDateTime(Console.ReadLine());

Console.WriteLine("How long is the trip time in minutes:");
string date = Console.ReadLine();
DateTime durationOfTrip = DateTime.Parse(date);

TimeSpan diff = time.Subtract(durationOfTrip);
Console.WriteLine(diff);
Console.ReadLine();

我收到此错误类型未处理的异常System.FormatException发生在mscorlib.dll

Additional information: String was not recognized as a valid DateTime.
4

2 回答 2

4

我怀疑您正在尝试将字符串“3:30 PM”解析为 DateTime 的实例。您需要使用自定义解析字符串:

string arrivalInput = Console.ReadLine();
var arrival =
    DateTime.ParseExact(
        arrivalTimeInput,
        "hh:mm tt",
        CultureInfo.InvariantCulture
    );

解析时间,但会将日期组件设置为今天。

不幸的是,框架中没有时间的清晰封装。

那么你的下一个问题是

string date = Console.ReadLine();
DateTime durationOfTrip = DateTime.Parse(date);

您试图将“30”之类的内容解析为DateTime. 那显然不会飞。您告诉用户在几分钟内输入输入,因此将输入转换为以下实例TimeSpan

string durationInput = Console.ReadLine();
var duration = new TimeSpan(0, Int32.Parse(durationInput), 0);

或者

var duration = TimeSpan.ParseExact(s, "mm", CultureInfo.InvariantCulture);

然后,您需要做的是从中减去 ,这将为您提供一个新的实例,然后您需要使用适当的格式字符串来仅输出时间。durationarrivalDateTime

请注意,我为您的变量名称赋予了更有意义的名称。date用户输入行程持续时间的名称特别不清楚。

于 2013-08-04T12:36:08.467 回答
0

普通用户会输入一个整数(“以分钟为单位的时间”),而您正试图将其解析为一个DateTime结构。.NET 怎么知道这些数字的含义?它们也可能是毫秒。

第一步可能是将输入解析为int,然后使用AddMinutes()JMK 提到的方法将分钟应用于已创建的DateTime time.

于 2013-08-04T12:35:58.733 回答