我制作了两个单选按钮,这样用户就可以选择是24小时格式还是12小时格式查看时间,这是我在计时器上的代码:
var format = rad24h.Checked ? "HH:mm" : "hh:mm:ss tt";
timer1.Interval = 500;
DateTime myDateTime = DateTime.Now;
label1.Text = string.Format("Hora actual {0}n ", myDateTime.ToString(format));
lblHK.Text = string.Format("Hong Kong {0}n ", myDateTime.AddHours(7).ToString(format));
lblNY.Text = string.Format("Nova Iorque {0}n ", myDateTime.AddHours(-5).ToString(format));
lblUkr.Text = string.Format("Ucrânia {0}n", myDateTime.AddHours(2).ToString(format));
lblTay.Text = string.Format("Taymyrskiy {0}n ", myDateTime.AddHours(3).ToString(format));
lblAla.Text = string.Format(" Alaska {0}n", myDateTime.AddHours(-9).ToLongString(format));
lblUru.Text = string.Format("Uruguay {0}n", myDateTime.AddHours(-4).ToString(format));
lblSyd.Text = string.Format(" Sydney {0}n", myDateTime.AddHours(9).ToString(format));
lblMad.Text = string.Format("Madagascar {0}n ", myDateTime.AddHours(2).ToString(format));
唯一适用于此的标签是lblUkr(自上而下的第四个)。。。
我已经检查了其他线路上的所有内容,以确保它们是一样的,我缺少什么?
此外,标签上没有显示AM/PM。。。我该怎么做?
更新
事实上,我注意到了一些奇怪的事情。。。当我第一次尝试代码时,我只在lblUkr上做了它,它正在工作,然后我改变了单选按钮的位置,把24小时按钮放在上面,并使它已经被选中,但当我调试时,它会下降,没有被选中。。。我认为,不知何故,当它进行调试时,它不会更新我在应用程序上所做的事情。。。有什么想法吗?
更新2
它现在确实起作用了,我不得不重新保存项目并更改一些东西,现在它起作用了。但是,时钟的尽头仍然没有AM、PM文本,我需要自己做吗?或者有代码吗?
它对我来说很好。不确定问题出在哪里。
请确保您确实启动了计时器,并且已将代码绑定为在Tick
事件上运行
为了检查它是否"工作正常",我将您的样品转换为如下:
var format = false ? "HH:mm" : "hh:mm:ss tt";
DateTime myDateTime = DateTime.Now;
Console.WriteLine(string.Format("Hora actual {0}n ", myDateTime.ToString(format)));
Console.WriteLine(string.Format("Hong Kong {0}n ", myDateTime.AddHours(7).ToString(format)));
Console.WriteLine(string.Format("Nova Iorque {0}n ", myDateTime.AddHours(-5).ToString(format)));
Console.WriteLine(string.Format("Ucrânia {0}n", myDateTime.AddHours(2).ToString(format)));
Console.WriteLine(string.Format("Taymyrskiy {0}n ", myDateTime.AddHours(3).ToString(format)));
Console.WriteLine(string.Format(" Alaska {0}n", myDateTime.AddHours(-9).ToString(format)));
Console.WriteLine(string.Format("Uruguay {0}n", myDateTime.AddHours(-4).ToString(format)));
Console.WriteLine(string.Format(" Sydney {0}n", myDateTime.AddHours(9).ToString(format)));
Console.WriteLine(string.Format("Madagascar {0}n ", myDateTime.AddHours(2).ToString(format)));
当您将var format = false ...
更改为var format = true ...
时,它将从12小时时钟切换为24小时时钟。这就是您所描述的内容,因此代码很好。
也许你应该设置一个断点并检查变量/看看你的代码通过调试器被调用了多少次。。。
您发布的代码应该可以工作。尝试为每个标签调用.Invalidate()
或.Refresh()
,以确保它们被重新绘制。另外,我假设您使用的是System.Windows.Forms.Timer
,所以没有跨线程控制访问,对吧?
DateTime date1;
date1 = new DateTime(2008, 1, 1, 18, 9, 1);
Console.WriteLine(date1.ToString("hh:mm:ss tt",
CultureInfo.InvariantCulture));
// Displays 06:09:01 PM
而且你也可以像一样使用你所在国家的文化
Console.WriteLine(date1.ToString("hh:mm:ss tt",
CultureInfo.CreateSpecificCulture("hu-HU")));
// Displays 06:09:01 du.
--来自MSDN
因此,您使用的是正确的格式,但尝试在OOP样式中使其类似:)
检查格式,H表示24小时格式,H表示12小时。
和"tt"表示AM或PM。