对于mySQL数据库,将日志文件日期时间格式从12小时时间转换为24小时制

时间:2013-06-04 04:07:26

标签: php mysql sql-server database bulk-load

我正在创建一个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小时制。

非常感谢任何帮助!

谢谢!

亚伦

2 个答案:

答案 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)使用与上述类似的函数来改变数据......