我正试图让我的第一个C#应用程序按预期工作。 :)
此应用程序是一个时间转换器,允许用户将数字输入六个不同的文本框。例如,用户将2009放入yyyy.Text,将20放入dd.Text,将02放入M.text,将02放入hh.Text,将49放入mm.Text,将35放入ss.Text。然后程序将数字转换为十六进制字符串。
例如, 2009 20 02 02:49:35 - > 63370694975000000 - > E1234FB3278DC0
private void button1_Click(object sender, EventArgs e)
{
String dateString = yyyy.Text + dd.Text + M.Text + hh.Text + mm.Text + ss.Text;
DateTime timestamp = DateTime.ParseExact(dateString, "yyyy dd M hh:mm:ss", CultureInfo.CurrentCulture);
long ticks = timestamp.Ticks;
long microseconds = ticks / 10;
convertedText.Text = microseconds.ToString("X");
}
应用程序编译正常,但在将数字放入文本框并单击“转换”按钮后,程序崩溃。错误:附加信息:字符串未被识别为有效的DateTime。
我使用错误的DataTime格式吗?或者其他的东西? :(
提前致谢...我想让这个工作:)
答案 0 :(得分:2)
我认为你需要以格式声明的空格和冒号。
答案 1 :(得分:2)
制作dateString
时,不要忘记插入空格。
使用
String.Format("{0} {1} {2} {3}:{4}:{5}",yyyy.Text, dd.Text, M.Text, hh.Text, mm.Text, ss.Text)
并且,放置一个try-catch块 - 这是在转换时捕获异常的最简单方法,(尽管不建议用于好的程序),以防用户输入一些疯狂的数字和文本。
答案 2 :(得分:1)
您的 dateString 与您指定的格式不对应 - 您有一个没有任何分隔符的字符串(如空格或冒号)。根据您的格式格式化字符串。此外,使用format utils总是一个好主意。但我认为你应该使用字符串,而不是字符串:
string dateString = string.Format("{0} {1} {2} {3}:{4}:{5}",
yyyy.Text, dd.Text, M.Text, hh.Text, mm.Text, ss.Text);
答案 3 :(得分:0)
尝试在DateTime timestamp = DateTime.ParseExact(dateString,“yyyy dd M hh:mm:ss”,CultureInfo.CurrentCulture)行插入断点。
然后在执行该命令之前,将鼠标悬停在dateString
上。然后我想你会看到dateString根本没有匹配你提供给ParseExact的格式。
当字符串与您给出的格式匹配时,它应该可以正常工作。
祝你好运! :)答案 4 :(得分:0)
试试这个
解决方案1:
private void button1_Click(object sender, EventArgs e)
{
DateTime timestamp = new DateTime(
Convert.ToInt32(yyyy.Text)
, Convert.ToInt32(M.Text)
, Convert.ToInt32(dd.Text)
, Convert.ToInt32(hh.Text)
, Convert.ToInt32(mm.Text)
, Convert.ToInt32(ss.Text));
long ticks = timestamp.Ticks;
long microseconds = ticks / 10;
convertedText.Text = microseconds.ToString("X");
}
解决方案2:
private void button1_Click(object sender, EventArgs e)
{
string dateString = string.Format("{0}/{1}/{2} {3}:{4}:{5}", M.Text,dd.Text,yyyy.Text, hh.Text, mm.Text, ss.Text);
long ticks = Convert.ToDateTime(dateString).Ticks;
long microseconds = ticks / 10;
convertedText.Text = microseconds.ToString("X");
}
<强>输出:强>
E1234FB3278DC0