让用户以下午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.
答案 0 :(得分:4)
我怀疑你正在尝试将字符串“3:30 PM”解析为DateTime的一个实例。您需要使用自定义解析字符串:
string arrivalInput = Console.ReadLine();
var arrival =
DateTime.ParseExact(
arrivalTimeInput,
"hh:mm tt",
CultureInfo.InvariantCulture
);
将解析时间,但会将日期组件设置为今天。
不幸的是,只有在框架中没有 time 的干净封装。
然后你的下一个问题是
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);
然后,您需要做的是来自duration
的{{3}} arrival
,这将为您提供DateTime
的新实例,然后您需要使用适当的格式化字符串只输出时间。
请注意,我已经为您的变量名称提供了更有意义的名称。用户输入行程持续时间的名称date
特别不清楚。
答案 1 :(得分:0)
普通用户会输入一个整数(“以分钟为单位的时间”),并且您尝试将其解析为DateTime
结构。 .NET将如何知道这些数字的含义?它们也可能是几毫秒。
第一步可能是解析int
的输入,然后使用提到的AddMinutes()
方法JMK将分钟应用于已创建的DateTime time
。