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