Mysql DB返回错误的日期格式(C#)

时间:2015-06-05 10:00:58

标签: c# mysql date select culture

这是一个非常简单的问题,关于我的C#-App的混乱情况:

Usings:
C#Desktop-App / Mysql 5.5

发生了什么:
我的应用程序是从db(Select date from mytable)中选择一些数据。列date的格式为yyyy-mm-dd。在我的C#-App中检索数据后获得文化敏感的输出。就我而言,格式为dd.mm.yyyy。从调试中查看我的截图。

注意: var listDate来自string类型! enter image description here

我的输出类似于DateTime类型。但是我从未将它转换为dateTime。列(db)date设置为格式date

那为什么我会得到这种格式?这是数据库还是应用程序问题? 我的目标是获得与db内部相同的格式yyyy-mm-dd

每一个帮助都表示赞赏。非常感谢!!!

编辑1:

我的代码:

public static void DB_Select(string s, params List<string>[] lists)
        {
            try
            {
                using(var conn = new MySqlConnection(ServerConnection))
                {
                    conn.Open();
                    MySqlCommand cmd = conn.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    string command = s;
                    cmd.CommandText = command;
                    using(var sqlreader = cmd.ExecuteReader())
                    while (sqlreader.Read())
                    {
                        if (sqlreader[0].ToString().Length > 0)
                        {
                            for (int i = 0; i < lists.Count(); i++)
                            {
                                lists[i].Add(sqlreader[i].ToString());
                            }
                        }
                        else
                        {
                            foreach (List<string> save in lists)
                            {
                                save.Add("/");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error while selecting data from database!\nDetails: " + ex);
            }
        }

无法想象这可能是问题所在。所有这一切都是循环输出并将单个列保存到不同的传递列表中(params List<string>[]

使用:

Services.DB_Select("SELECT date FROM myTable WHERE something = something")

所以一切都被保存成字符串而没有任何转换。它只是关于select和输出db - &gt; C#。我选择日期格式并获得对文化敏感的dateTime值。这怎么可能?

编辑2 :(解决方案)

如果我得到它SELECT CONCAT(date) FROM mytable...(告诉数据库把(col)日期作为字符串处理,我得到干净的输出yyyy-mm-dd!

没有concat,我的dateTime输出文化敏感。因此,date列的日期格式必须存在问题。但为什么 - 真的不知道。

3 个答案:

答案 0 :(得分:1)

如果你愿意,你可以这样:

CREATE external TABLE IF NOT EXISTS test_Neighbors(
    objID string,
    NeighborObjID string ,
    distance string,
    type smallint ,
    neighborType smallint ,
    mode tinyint ,
    neighborMode tinyint) 
    row format delimited fields terminated by ','
    stored as textfile
    LOCATION '/user/root/test/hive/';

使用此方法:

string example = "20.08.2013 00:00:00";
DateTime result = GetDate(example);

答案 1 :(得分:1)

由于您没有提供如何从数据库获取数据,因此很难说。可能有两个选项 - 1)在检索数据时进行某种隐式转换,因此您从db获取格式化的字符串或2)您在获取数据后在某处进行转换。

您可以做的是转换为DateTime listDate.Select(d => DateTime.ParseExact(d,"dd.MM.yyyy hh:mm:ss",CultureInfo.InvariantCulture))然后将其格式化为您需要的格式。

更好的解决方案当然是直接从DB获取DateTime中的日期。请发布您的代码。

修改

问题在于sqlreader [i] .ToString() - 这会从环境中获取您的文化并进行转换。在这种情况下,我会检查值的类型,如果是DateTime,则使用ToString(“yyyy-MM-dd”)而不是简单的ToString()

来自文档:

  

此方法使用从当前导出的格式信息   文化。特别是,它结合了返回的自定义格式字符串   通过ShortDatePattern和LongTimePattern属性   由Date返回的DateTimeFormatInfo对象   Thread.CurrentThread.CurrentCulture.DateTimeFormat属性。更多   信息,请参阅CultureInfo.CurrentCulture。其他重载   使用ToString方法可以指定格式为的文化   使用和定义DateTime值的输出模式。

答案 2 :(得分:0)

好吧,我的一所大学告诉我一个解决方案。至少对我来说听起来很合理:

col本身来自date类型,它是dateTime的简短版本。使用像SELECT date FROM mytable这样的明确选择时,输出将为DateTime。这就是为什么我也在我的输出中获得时间部分。

当前往SELECT CONCAT(date) FROM mytable时,值会像字符串一样处理。我找到了自己的解决方法。这只会输出日期本身。

奇怪的行为。肯定是因为我长时间使用这个date-formatted-column。从来没有遇到任何问题。

非常感谢你的兴趣!