0

我正在创建一个 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

每个日志文件有数以万计的条目,因此无法对每个条目进行此操作。我需要想办法将每个日志文件的条目批量转换为 24 小时制。

任何帮助将不胜感激!

谢谢!

亚伦

4

2 回答 2

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列是日期时间类型,并且str_date列包含 12 小时格式的字符串值。

或者如果由于某种原因您将其存储为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演示。

于 2013-06-04T04:33:39.617 回答
0

为什么不编写一个简单的应用程序,它会搜索所有日志条目并在找到 PM 格式的日期时进行更新。你基本上需要写一段代码,如果有下午的时间会增加 12 小时。

这是 C# 中的粗略代码...尚未完全测试,但您可以在此基础上构建...</p>

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) 使用与上述类似的功能来更改数据...</p>

于 2013-06-04T12:17:59.423 回答