这是一个非常简单的问题,关于我的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
类型!
我的输出类似于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
列的日期格式必须存在问题。但为什么 - 真的不知道。
答案 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。从来没有遇到任何问题。
非常感谢你的兴趣!