我正在创建一个Web应用程序来分析客户端自定义数据库中的数据。我很难找到如何将客户端的日志文件条目从12小时时钟转换为24小时制的方法。我设置的数据库无法读取12小时时间格式,因此显示时间错误。
我使用的日志文件如下所示:
Site_Name,number_of_clicks,DD/MM/YYYY_2:00PM,Interaction_Type
我需要将日志文件转换为如下所示:
Site_Name,number_of_clicks,DD/MM/YYYY_14:00,Interaction_Type
每个日志文件中有数万个enteries,因此每个条目都无法完成此操作。我需要找出一种方法,将每个日志文件的条目批量转换为24小时制。
非常感谢任何帮助!
谢谢!
亚伦
答案 0 :(得分:1)
如果您想在数据库端执行此操作并使用MySql,则可以使用STR_TO_DATE()
读取它并将其用作日期时间值
INSERT INTO log (`Site_Name`, `number_of_clicks`, `date`, `Interaction_Type`)
SELECT 'site1', 10, STR_TO_DATE('10/05/2013_2:00PM', '%d/%m/%Y_%l:%i%p'), 1;
或
UPDATE log
SET date = STR_TO_DATE(str_date, '%d/%m/%Y_%l:%i%p');
假设date
列的类型为datetime,str_date
列包含12h格式的字符串值。
或者如果由于某种原因您将其存储为VARCHAR
并且确实需要将其格式化为DD/MM/YYYY_14:00
,那么您可以使用DATE_FORMAT()
DATE_FORMAT(STR_TO_DATE('10/05/2013_2:00PM', '%d/%m/%Y_%l:%i%p'), '%d/%m/%Y_%k:%i')
将产生
| NEWDATE |
--------------------
| 10/05/2013_14:00 |
要就地更新
UPDATE log
SET str_date = DATE_FORMAT(STR_TO_DATE(str_date, '%d/%m/%Y_%l:%i%p'), '%d/%m/%Y_%k:%i');
这是 SQLFiddle 演示。
答案 1 :(得分:0)
为什么不编写一个简单的应用程序来搜索所有日志条目,并在PM格式找到日期时进行更新。 您基本上需要编写一段代码,如果当时有PM,则会增加12小时。
这是C#中的粗略代码......未经过全面测试,但您可以在此基础上构建......
protected string ConvertToPM(string logEntry)
{
string result = string.Empty;
//DD/MM/YYYY_2:00PM
if (logEntry.Contains("PM"))
{
string temp = logEntry.Substring(logEntry.IndexOf("_"), logEntry.IndexOf(":") - logEntry.IndexOf("_"));
result = logEntry.Replace(temp, (Convert.ToInt32(temp) + 12).ToString());
}
return result;
}
只需添加一段代码即可a)逐行读取日志文件b)提取日期部分c)使用与上述类似的函数来改变数据......