如何将(错误的)12:00时间转换为2400时间?

时间:2012-08-13 15:27:44

标签: c# time-format

我在这里遇到了一些问题,我即将自己放弃,我希望这里的专家可以帮助我挽救我的数据。

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

时间,数据

时间,数据

...

它是文本格式,我有大约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可能是上午12点(我需要减去它12小时)或1200点我不做任何事情。

  3. 文件的开头可以在任何给定的时间开始(我手动打开程序来收集,所以时间不准确),所以没有展望并看到日期变化,我不知道是否上午10点是上午或下午

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

    编辑:现在我可以准确地说出我的问题,我需要弄清楚我是处于AM模式还是PM模式,如果没有那么多行,我可以使用excel并纠正它,手动查看在接下来的几行中推断出它是AM模式还是PM模式。有了20亿行,我需要对其进行逻辑编程以确定它是AM还是PM模式,我很难这样做。如何处理过渡期间出现故障的那几分钟?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-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小时格式,没有am / pm)。

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

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

  • 如果它确实是AM时间,则表示您拥有正确的日期。
  • 如果时间超过12:59,您将获得PM的正确日期(因为它以24小时格式报告)
  • 如果日期应该是PM时间,但是作为AM时间读入,那么您知道您处于12小时格式并需要检查上一行或下一行以尝试确定它应该是AM还是PM。< / LI>

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

编辑:

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

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