char数组到字符串指定索引

时间:2011-05-12 06:47:31

标签: c#

我正在尝试制作一个时钟。小时是一个字符串。我想把那小时放入一个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;
    }
}

3 个答案:

答案 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);

}