C#。相同的代码仅适用于1个标签......为什么?

时间:2011-05-23 08:41:44

标签: c# winforms datetime

我制作了2个radiobuttons,因此用户可以选择是否想要以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上做了它,它正在工作,然后我改变了单选按钮的位置,将24h一个放在顶部并制作它已经选择了,但是当我调试时它会关闭并且没有被选中...我认为不知何故,当它调试时它不会更新我在应用程序上做什么...任何想法可能是什么错误?

更新2

它现在可以正常工作,我不得不重新保存项目并改变一些事情,现在它可以正常工作,但是,时钟结束时没有AM,PM文本,我是否需要这样做我自己还是有代码?

4 个答案:

答案 0 :(得分:3)

这对我来说很好。不确定是什么问题。

确保您确实启动了计时器,并且已将代码绑定到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小时制。这就是你所描述的,所以代码很好。

也许你应该设置一个断点并检查变量/看看你的代码通过调试器被调用了多少次......

答案 1 :(得分:1)

您发布的代码应该有效。尝试为每个标签调用.Invalidate().Refresh(),以确保重绘它们。另外,我假设您使用的是System.Windows.Forms.Timer,因此没有跨线程控制访问权限,对吗?

答案 2 :(得分:1)

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风格来表达它:)

答案 3 :(得分:0)

检查格式,H表示24小时格式,h表示12小时。

AM或PM的

和'tt。