字符数组到指定索引的字符串
本文关键字:索引 字符串 数组 字符 | 更新日期: 2023-09-27 17:56:17
我正在尝试制作时钟。小时是一个字符串。我想将该小时放入 char 数组中,以便我可以将小时分成一个或两个索引。这样,我可以在各个索引上使用大小写,最终将其绑定到网格并为数字时间绘制一条线。
因此,小时被转换为数组。但是我想获取第一个索引 0 并将其存储到字符串或 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;
}
}
我会完全避免弄乱字符串和字符数组。改用算术:
int hour = DateTime.Now.Hour;
int leastSignificantDigit = hour % 10;
int mostSignificantDigit = hour / 10;
// Use one of these as input for your switch statement.
%
是模运算符;在本例中为除以 10 的余数。
编辑:我注意到你想要一个12小时的时钟。您可以为此添加一些额外的计算。替换第一行代码:
int hour = DateTime.Now.Hour % 12;
if (hour == 0) hour = 12;
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];
现在你有小时,分钟,秒和T。因为您可以信任这些部件使用 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() 模式
使用模 (%
) 运算符将 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);
}