1

我这里有点问题,我自己要放弃了,希望这里的专家能帮助我挽救我的数据。

我有一个程序来收集一些财务数据。数据格式如下

时间、数据

时间、数据

...

它是文本格式,我有大约 30 个文件,每个文件大约 1-2 GB。我遇到的问题是当我第一次启动它时,我不小心将其格式化为 12 小时时间格式“yyyy/MM/dd hh:mm:ss.fff”而不是 2400 小时时间“yyyy/MM/dd HH:mm :ss.fff”。

现在我的数据是没有上午/下午的 12 小时格式。

我现在需要编写一个程序将 12 小时格式转换为 2400 格式。我面临的问题如下:

  1. 数据大致按时间顺序排列。时间戳来自数据服务器,取决于互联网流量,顺序可能为 1 秒左右。但考虑到我收集的数据量,它可能有多达 100000 行乱序。

  2. 没有上午/下午,1200 可能是上午 1200(我需要从中减去 12 小时)或下午 1200,我什么都不做。

  3. 文件的开头可能在任何给定时间开始(我手动打开程序来收集,所以时间不准确),所以如果不向前看,看看天的变化,我不知道 10:00 是上午还是下午

我尝试转换之前的时间但不成功。任何人都可以通过提供一些代码或伪代码来帮助我吗?

编辑:现在我可以准确地说出我的问题,我需要从数据中确定我是处于 AM 模式还是 PM 模式,如果没有那么多行,我可能可以使用 excel 并更正它,手动查看下一个几行并推断它是AM模式还是PM模式。有 1/20 亿行,我需要对其进行逻辑编程以确定它是 AM 还是 PM 模式,我很难这样做。以及如何处理在过渡期间出现问题的那几分钟?

4

2 回答 2

1

假设记录之间的时间间隔不超过 12 小时,您的转换程序只需要跟踪它当前查看的是上午时间还是下午时间。然后,每当小时数达到 12 或转为较低的数字时,您切换 AM/PM 标志。您必须提供一个参数,告诉它以哪种模式启动。

于 2012-08-13T15:53:28.883 回答
-1

上午 12 点是 0000,下午 12 点是 1200,但凌晨 1 点是 0100,下午 1 点是 1300(所以它不仅仅是从上午 12 点减去 12。

如果您将时间读入DateTime对象,则与使用 .AddHours(double) 一样简单

myDateTime=myDateTime.AddHours(12);//Add 12 hours
//Or
myDateTime=myDateTime.AddHours(-12);//Subtract 12 hours

您如何决定是处于 AM 还是 PM 模式取决于您,我不太明白为什么您无法解决问题,因为您说数据是随时生成的。

我会说如果你在字符串上运行“yyyy/MM/dd hh:mm:ss.fff”(没有上午/下午的 12 小时格式)。

  • 如果它有效,您知道:日期仍处于上午/下午模式或上午 24 小时格式
  • 如果失败,您知道:日期处于 24 小时模式并且它是 PM(因为它将超出 12 小时模式的范围)

使用格式“yyyy/MM/dd HH:mm:ss.fff”应该始终解析您的字符串,并且您知道以下内容:

  • 如果它真的是上午时间,那么你有正确的日期。
  • 如果时间超过 12:59,您将获得 PM 的正确日期(因为它以 24 小时格式报告)
  • 如果日期应该是 PM 时间,但读取为 AM 时间,那么您知道您是 12 小时格式,并且需要检查前面或后面的行来尝试确定它应该是 AM 还是 PM。

您可能可以根据该信息和任何其他日期/时间信息设计某种逻辑来获得您想要的结果。

编辑:

您可以做的是查看文件修改时间(或创建时间,如果可以的话),这应该为您提供 AM 或 PM。然后,您应该知道第一个(或最后一个)条目是否是 AM/PM,然后可以从那里继续。

示例:如果最后输入的时间是 11:00 (AM),然后下一行是同一天的 3:00,则您会知道它是 3:00 (PM)。但是,如果日期发生变化,您可能无法判断条目是否从上午/下午开始。查看某一天的所有数据可能会给您答案。如果当天的条目仅来自上午或仅来自下午,您将无法确定。

于 2012-08-13T15:42:25.890 回答