我希望在我的数据库中获取当前时间,将其显示在标签中,然后每秒更新一次。 我在这里使用计算机的当前时间:
public Main()
{
InitializeComponent();
timer1.Enabled = true;
timer1.Interval = 1000;
}
private void timer1_Tick(object sender, EventArgs e)
{
lbTimer.Text = DateTime.Now.ToString("HH:mm:ss");
}
但我想将其更改为Postgre数据库的当前时间。怎么做?也许是这样的,当然这是不对的:
private void timer1_Tick(object sender, EventArgs e)
{
lbTimer.Text = getServerTime();
}
public string getServerTime()
{
string time = "";
try
{
conn.Open();
string sql = "SELECT CURRENT_TIME";
NpgsqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
time = cmd.ExecuteScalar().ToString();
}
catch (Exception msg)
{
MessageBox.Show(msg.ToString());
}
finally
{
conn.Close();
}
return time;
}
我认为我的查询是正确的,但time = cmd.ExecuteScalar().ToString();
的值类似于0001/01/01 HH:mm:ss
。所以我想知道我错了什么,以及获取查询结果的正确语法HH:mm:ss
。
答案 0 :(得分:0)
我解决了我的问题。只需将代码更改为:
string timestring = cmd.ExecuteScalar().ToString();
DateTime timer = DateTime.Parse(timestring);
time = timer.ToString("HH:mm:ss");
答案 1 :(得分:0)
据我所知,the documentation ExecuteScalar
应该为此查询返回DateTimeOffset
值。如果是这种情况,您可以直接在值上调用ToString(string format)
而不解析它。你只需要施展它。
这样的事情应该有效(免责声明:未经测试的代码):
var currentTime = (DateTimeOffset) cmd.ExecuteScalar();
time = currentTime.ToString("HH:mm:ss");