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

C# 如何在for循环中增加小时数,c#,wpf,C#,Wpf,对于学校练习,我必须在WPF应用程序中制作一个文本时钟,它将以文本形式为您提供时间。例如,我想要的是:当时间是10:30时,时钟应该是10点半,用荷兰语来说是“11点半”,“11点半”。但我不知道如何在这个for循环中实现,我尝试了I++但这并没有增加小时数 请记住,我刚刚开始编写代码,所以可能有很多错误,我已经做了任何方式这里的代码 我希望大家都明白,否则我会把一切都改成英语 public partial class MainWindow : Window { public MainW

对于学校练习,我必须在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++;
                }
            }
        }
    }
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
var date=DateTime.Now;
前景=新的SolidColorBrush(Colors.Red);
前台=新的SolidColorBrush(Colors.Red);
变量时间=新标签[]
{
TijdEen,TijdTwee,TijdDrie,TijdVier,TijdVijf,TijdZes,TijdZeven,TijdAcht,TijdNegen,TijdTien,
TijdElf,Tijdtwalf
};
int GetMinutes(){
变量分钟数=5*(整数)数学四舍五入(date.Minute/5.0);
返回分钟数;
}
int GetHour()
{
变量小时=(date.hour+11)%12+1;
如果(小时==1){
TijdEen.Foreground=新的SolidColorBrush(Colors.Red);
}
返程时间;
}

对于(inti=1;i,这只是psuedo代码,但将向您展示增加小时所需的操作

var dt = DateTime.Now.AddHours(1);
因此,在您的代码中,您只需要

date.AddHours(1);

希望这会给你足够的时间继续下去,这只是psuedo代码,但会告诉你需要做什么来增加你的时间

var dt = DateTime.Now.AddHours(1);
因此,在您的代码中,您只需要

date.AddHours(1);

希望这能给您足够的时间继续进行

您的代码在设置控件颜色时有点难以理解。 这里有一些代码可以像人说的那样打印出时间。我希望你可以调整它来设置控件的颜色

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);
}
会打印出来的

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

在控件上设置颜色时,您的代码有点难以遵循。 这里有一些代码可以像人说的那样打印出时间。我希望你可以调整它来设置控件的颜色

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);
}
会打印出来的

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

下面是一个以字符串形式输出时间的示例程序-它应该很容易适应使用标签数组和荷兰语短语:

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作为偏移量,将其放入文本分钟数字符串数组中


当您需要增加小时数时,您还需要确保将小时数调整为12,以便在数组中获得正确的偏移量。

以下是一个以字符串形式输出时间的示例程序-它应该可以轻松地使用标签数组和荷兰语短语:

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作为偏移量,将其放入文本分钟数字符串数组中


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

谢谢!但不幸的是,这不起作用,它给了我一个警告:“未使用纯方法的返回值”不确定原因。@Ezrab_u它应该是
date=date.AddHours(1)
因为它创建了一个新的
日期时间
。@juharr也不起作用,因为现在它几乎使每个文本都变成红色。@Ezrab_uu.不要像我一样忘记任何语句末尾的
。谢谢!但不幸的是,这不起作用。它给了我一个警告:“未使用纯方法的返回值”不确定原因。@Ezrab_u它应该是
date=date.AddHours(1)
因为它创建了一个新的
日期时间
。@juharr也不起作用,因为现在它几乎使每个文本都变成红色。@Ezrab_uu.不要像我一样忘记任何语句末尾的
。对不起,我不明白的一件事是,这需要是一个活动时钟吗?随着时间的推移更改标签,还是只在启动时才需要?我想你已经忘记了在这里发布的代码比需要的要多。您说“我想要的是,例如:当10:30时,时钟应该显示10点半,在荷兰语中是‘11点前半’,‘11点半’。”,对我来说,这听起来像是你需要一个方法,它接受一个
DateTime
,并返回一个格式化的字符串。然后,你可以在任何你想显示“Half 11”的地方调用这个方法对于用户来说。我在您的代码中没有看到任何类似的内容,这让人困惑。似乎您只是在设置前景色?抱歉,我不明白的一点是,这是否需要是一个活动时钟?随着时间的推移更改标签,还是只在启动时才需要?我认为您在这里发布的代码比需要的多。您声明“例如,我想要的是:当时间是10:30时,时钟应该显示10点半,用荷兰语来说是‘11点之前的一半’,‘11点之前的一半’”,在我看来,这就像你需要一个方法,它接收一个
日期时间
,并返回一个格式化字符串。然后,你只要从任何你想显示“11点之前的一半”的地方调用这个方法“对用户来说。我在您的代码中没有看到类似的内容,这让人困惑。您似乎只是在设置前景色?