Winform:从postgresql获取current_time并将其显示在标签中?

时间:2018-04-09 09:34:01

标签: c# postgresql winforms

我希望在我的数据库中获取当前时间,将其显示在标签中,然后每秒更新一次。 我在这里使用计算机的当前时间:

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

2 个答案:

答案 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");