2011-05-12 3 views
0

J'essaie de faire une horloge. L'heure est une chaîne. Je veux mettre cette heure dans un tableau char afin que je puisse séparer l'heure en un ou deux index. De cette façon, je peux utiliser un cas sur les index individuels pour finalement le lier à une grille et dessiner une ligne pour l'heure numérique ..char array à string spécifiant un index

Ainsi, l'heure est convertie en tableau. Mais je veux prendre le premier index 0 et le stocker dans une chaîne ou un int afin que je puisse le passer dans une fonction où je peux employer un cas là-dessus. Si je le laisse comme un char et le convertir en un int je reçois un nombre comme 50 qui n'est pas bon. Donc, quand j'essaie d'assigner le premier index du tableau à une chaîne, il ne me laisse pas convertir de tableau en chaîne.

hr1 = hours[0]; 

Quelle est ma meilleure option de l'heure dans seperating index séparés, puis le convertir vers le bon int? En outre, l'heure est sur 24 heures et je voudrais que ce soit 12 heures.

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; 
    } 
} 

Répondre

1

Je voudrais éviter de jouer avec des chaînes et des tableaux char au total. Utiliser à la place arithmétique:

int hour = DateTime.Now.Hour; 
int leastSignificantDigit = hour % 10; 
int mostSignificantDigit = hour/10; 
// Use one of these as input for your switch statement. 

% est le modulo operator; le reste d'une division par 10 dans ce cas.

Éditer: J'ai remarqué que vous voulez avoir une horloge de 12 heures. Vous pouvez ajouter des calculs supplémentaires pour cela. Remplacement pour la première ligne de code:

int hour = DateTime.Now.Hour % 12; 
if (hour == 0) hour = 12; 
1
if (hours.Length > 1) 
      { 

       hr1 = hours[0].ToString();  // no error - 
       hr2 = hours[1].ToString(); 

       // SetHourDigit1(Convert.ToInt32(hr1)); 

      } 

mais si vous voulez obtenir des pièces de temps utilisez:

dateparts = datestring.splite(':'); 

string hour = dateparts[0]; 
string minute = dateparts[1]; 

string s = dateparts[2]; 

maintenant vous avez une heure, minute, seconde et t. à cause de vous pouvez faire confiance aux parties utilisent int.parse pour les convertir en int.

int nhour = int.parse(hour); 
int nminute = int.parse(minute); 
int nsecond = int.parse(s); 

pendant 24 heures

hrs = DateTime.Now.Hour.ToString("HH:mm:ss"); 

Ceci est un lien utile pour u: DateTime.ToString() Pattern

+0

Y at-il loin de le changer en 12 heures sans ajouter cette ligne? "hh: mm: ss tt" –

+0

Oui juste H pas h – Saleh

+0

Widout tt ............................. – Saleh

0

Utilisez le modulo (%) opérateur pour convertir la valeur de 24 heures à 12 heures, et aussi pour obtenir le deuxième chiffre du numéro à deux chiffres. Il n'y a aucune raison de le formater en tant que chaîne, puis de le convertir en nombres.

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

}