我正在尝试制作一个时钟。小时是一个字符串。我想把那小时放入一个char数组中,这样我就可以将小时分成一个或两个索引。这样我就可以在各个索引上使用一个案例,最终将其绑定到网格并为数字时间画一条线。
因此,小时转换为数组。但我想取第一个索引0并将其存储到一个字符串或int中,所以我可以将它传递给一个函数,我可以使用它的情况。如果我把它作为一个字母并将其转换为一个int我得到一个像50这样的数字是不好的。
因此,当我尝试将数组的第一个索引分配给字符串时,它不会让我从数组转换为字符串。
hr1 = hours[0];
将小时分成单独的索引,然后将其转换为正确的int,我最好的选择是什么?此外,时间是24小时,我希望它是12小时。
private void _timer_Elapsed(object sender, EventArgs e)
{
DateTime now = DateTime.Now;
//DigitalTime = now.ToString("hh:mm:ss tt");
//DigitalTime = now.ToString();
//DigitalTime = DateTime.Now.Hour.ToString();
SecondAngle = now.Second * 6;
MinuteAngle = now.Minute * 6;
HourAngle = (now.Hour * 30) + (now.Minute * 0.5);
string hrs, hr1, hr2;
char[] hours = new char[15];
hrs = DateTime.Now.Hour.ToString("hh:mm:ss tt");
hours = hrs.ToCharArray();
if (hours.Length > 1)
{
hr1 = hours[0]; // error -
hr2 = hours[1];
// SetHourDigit1(Convert.ToInt32(hr1));
}
else
{
// hr1 = '0';
hr2 = hours[0];
}
}
public void SetHourDigit1(int num)
{
switch (num)
{
case 0:
MessageBox.Show("num" + num);
break;
case 1:
MessageBox.Show("num" + num);
break;
case 2:
break;
}
}
答案 0 :(得分:1)
if (hours.Length > 1)
{
hr1 = hours[0].ToString(); // no error -
hr2 = hours[1].ToString();
// SetHourDigit1(Convert.ToInt32(hr1));
}
但如果你想获得部分时间,请使用:
dateparts = datestring.splite(':');
string hour = dateparts[0];
string minute = dateparts[1];
string s = dateparts[2];
现在你有小时,分钟,秒和小时。
因为你可以信任部件使用int.parse将它们转换为int。
int nhour = int.parse(hour);
int nminute = int.parse(minute);
int nsecond = int.parse(s);
24小时
hrs = DateTime.Now.Hour.ToString("HH:mm:ss");
这是一个有用的链接: DateTime.ToString() Pattern
答案 1 :(得分:1)
我会避免弄乱字符串和char数组。请改用算术:
int hour = DateTime.Now.Hour;
int leastSignificantDigit = hour % 10;
int mostSignificantDigit = hour / 10;
// Use one of these as input for your switch statement.
%
是modulo operator;在这种情况下,除法的余数为10。
编辑:我注意到你想要一个12小时的时钟。您可以为此添加一些额外的计算。替换第一行代码:
int hour = DateTime.Now.Hour % 12;
if (hour == 0) hour = 12;
答案 2 :(得分:0)
使用modulo(%
)运算符将24小时值转换为12小时,并获取两位数字的第二位数字。没有理由将其格式化为字符串,然后将其转换回数字。
private void _timer_Elapsed(object sender, EventArgs e) {
DateTime now = DateTime.Now;
int hour12 = now.Hour % 12;
SecondAngle = now.Second * 6;
MinuteAngle = now.Minute * 6;
HourAngle = (hour12 * 30) + (now.Minute * 0.5);
SetHourDigit1(hour12 / 10);
SetHourDigit2(hour12 % 10);
}