我制作了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文本,我是否需要这样做我自己还是有代码?
答案 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。