如何在for循环中增加小时数

时间:2018-04-12 15:49:07

标签: c# wpf

对于学校练习,我必须在WPF应用程序中制作一个文本时钟,它将为您提供文本时间。我想要的是例如:当它是10:30时,时钟应该是10点半,荷兰语是11点半之前的一半,“11点半”和“半点”之间的时间。 。但是我不确定如何在这个for循环中做到这一点我试过i++;但是这并没有增加小时。

请记住,我刚刚开始编码,所以我可能在这里找到了很多错误代码。

我希望每个人都清楚,否则我会把一切都变成英语。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var date = DateTime.Now;

        TijdHet.Foreground = new SolidColorBrush(Colors.Red);
        TijdIs.Foreground = new SolidColorBrush(Colors.Red);

        var time = new Label[]
        {
            TijdEen, TijdTwee, TijdDrie, TijdVier, TijdVijf, TijdZes, TijdZeven, TijdAcht, TijdNegen, TijdTien,
            TijdElf, TijdTwaalf
        };

        int GetMinutes() {
            var minutes = 5 * (int) Math.Round(date.Minute / 5.0);
            return minutes;
        }

        int GetHour()
        {
            var hour = (date.Hour + 11) % 12 + 1;

            if (hour == 1) {
                TijdEen.Foreground = new SolidColorBrush(Colors.Red);
            }

            return hour;
        }

        for (int i = 1; i <= 12; i++)
        {
            if (GetHour() == i + 1)
            {
                time[i].Foreground = new SolidColorBrush(Colors.Red);

                if (GetMinutes() == 0) {
                    TijdUur.Foreground = new SolidColorBrush(Colors.Red);
                }

                if (GetMinutes() == 5 || GetMinutes() == 10 || GetMinutes() == 35 || GetMinutes() == 40) {
                    TijdOver.Foreground = new SolidColorBrush(Colors.Red);
                }

                if (GetMinutes() == 20 || GetMinutes() == 25 || GetMinutes() == 50 || GetMinutes() == 55) {
                    TijdVoor.Foreground = new SolidColorBrush(Colors.Red);
                }

                if (GetMinutes() == 30)  {
                    TijdHalf.Foreground = new SolidColorBrush(Colors.Red);
                    i++;
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

这只是伪造的代码,但会告诉你需要做些什么来增加你的时间

var dt = DateTime.Now.AddHours(1);

所以,在你的代码中你只需要做

date.AddHours(1);

希望这应该足以让你继续

答案 1 :(得分:2)

使用控件上的颜色设置有点难以理解您的代码。 这里有一些代码可以像人类所说的那样打印出时间。我希望你能适应它来设置控件的颜色。

static void PrintTime(int hours, int minutes)
{
    if (minutes >= 30)
    {
         hours++;
         minutes -= 60;
    }
    hours = hours % 12;
    if (hours == 0) hours = 12;
    Console.WriteLine("The time is " + Math.Abs(minutes) + (minutes < 0 ? " to " : " past ") + hours);
}

如果你这样称呼它

PrintTime(10, 29);
PrintTime(10, 30);
PrintTime(10, 31);

它会打印

The time is 29 past 10
The time is 30 to 11
The time is 29 to 11

答案 2 :(得分:2)

这是一个以字符串形式输出时间的示例程序 - 它应该很容易适应您使用的标签数组&amp;荷兰语措辞:

void Main()
{
  string[] hours = { "Twelve", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven"};
  string[] minutes = { "O'Clock", "Five", "Ten", "Quarter", "Twenty", "TwentyFive", "Half", "TwentyFive", "Twenty", "Quarter", "Ten", "Five"};

  DateTime now = DateTime.Now;

  int HourOffset = now.Hour % 12;
  int MinOffset = (now.Minute / 5);

  string TimeStr, ConStr;
  if (MinOffset == 0)
    TimeStr = hours[HourOffset] + " " + minutes[0];
  else
  {
    if (MinOffset >= 6)
    {
      ConStr = " To ";
      HourOffset++;
      HourOffset %= 12;
    }
    else
      ConStr = " Past ";
    TimeStr = minutes[MinOffset] + ConStr + hours[HourOffset];
  }

  Console.WriteLine(TimeStr);
}

请注意,如果仅显示当前时间,则不需要for循环。

首先将小时数作为12个元素小时字符串数组的偏移量。 然后得到分钟,将其除以5作为文本分钟字符串数组的偏移量。

当您需要增加小时时 - 您还需要确保它被修改为十二以获得正确的数组偏移量。