c#NodaTime将日期格式更改为yyyy-MM-dd HH:MM:ss

本文关键字:HH yyyy-MM-dd MM ss 日期 格式 c#NodaTime | 更新日期: 2023-09-27 17:57:50

我在项目的大部分代码中都使用NodaTime。我得到一个LocalDateTime作为值,需要更改格式以将其作为日期时间字段插入MySQL数据库。

我看到了一些OffSetPattern,但不确定如何使用它。

这是我试图将其写入数据库的地方。

public void SetDataLog(Controller controllerInfo, LocalDateTime time, string count)
{
    var count2 = Convert.ToInt32(count);
    var sql = "INSERT INTO controller_activation_log (controller_id, activations, date_created, date_created_timezone) VALUES(" + controllerInfo.controllerId + ", " + count2 + ", ''" + time + "'', ''UTC'')";
            mysqldb.Write(sql);
}

LocalDateTime格式为04/10/2014 10:45:02(示例)我需要它是2014-04-10 10:45:02作为字符串。

我试过串,但不幸的是,在这种情况下不起作用。我看到了一些关于创建模式和解析它的内容,但我不明白如何做到这一点,因为我在NodaTime中看不到这一点??对NodaTime和c#来说还是个新手,所以也许我错过了一些相对简单的东西。有人能帮我得到我需要的格式吗?

c#NodaTime将日期格式更改为yyyy-MM-dd HH:MM:ss

如果您正在使用LocalDateTime,并且只需要以特定方式将其格式化为字符串,那么只需执行以下操作:

string s = time.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

您必须传递一个格式提供程序,在您的情况下应该是CultureInfo.InvariantCulture

但是,您应该而不是将日期作为字符串传递,或者通过插入字符串参数来构建SQL语句。请参数化您的查询,并使用适当的数据类型!

在MySQL中,应该使用DATETIME类型(用于存储NodaTime LocalDateTime)。有关不同的日期/时间数据类型,请参阅MySQL文档。

传入参数时还需要调用.ToDateTimeUnspecified(),因为MySQL客户端库不理解Noda Time类型,但理解DateTime

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = yourConnection;
cmd.CommandText = yourSQLString; // use parameter placeholders like "@time"
cmd.Prepare();
cmd.Parameters.AddWithValue("@time", time.ToDateTimeUnspecified());
// and the rest of your parameters...
cmd.Parameters.ExecuteNonQuery();

此外,当您从LocalDateTime开始时,在SQL语句中硬编码"UTC"作为时区是很奇怪的。如果你在写UTC,你可能应该从Instant开始。

或者您可以简单地使用这个

String date = mydate.ToString("u", CultureInfo.InvariantCulture);
date=date.Substring(0,date.Length-1);

您可以这样做:

datetimeObj.ToString("s").Replace("T"," ")

或者你可以做一个正则表达式:

Regex.Replace("04/10/2014 10:45:02",@"('d+)/('d+)/('d+)'s('d+):('d+):('d+)","$3-$1-$2 $4:$5:$6");

或者,您可以执行.ToString("yyyy-MM-dd HH:mm:ss")