1

我在项目的大部分代码中都使用了 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# 来说还是新手,所以也许我错过了一些相对简单的东西。任何人都可以帮助获得我需要的格式吗?

4

3 回答 3

5

如果您正在使用 aLocalDateTime并且只需要以特定方式将其格式化为字符串,那么只需这样做:

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. 如果您正在编写 UTC,您可能应该以Instant.

于 2014-04-10T16:26:09.607 回答
0

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

String date = mydate.ToString("u", CultureInfo.InvariantCulture);
date=date.Substring(0,date.Length-1);
于 2014-04-10T16:48:15.713 回答
-2

你可以这样做:

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")

于 2014-04-10T15:59:50.443 回答