我可以使用 RegEx 将 12 小时格式的美国日期替换为 24 小时格式的英国日期吗?

问题描述 投票:0回答:1

我有一个 .dat 文本文件,该文件是从计算机上基于 Web 的平台导出的,日期和时间格式设置为 m/d/yyyy HH:MM AM/PM。 (所以 1999 年 5 月 1 日上午 9 点是 5/1/1999 9:00 AM)

我需要这些日期采用英国格式,时间采用 24 小时格式 (dd/mm/yyyy hh:mm) - 例如 01/05/1999 09:00。

我正在使用记事本++进行编辑,可以使用以下命令查找和替换日期:

第 1 步(月份填充):

查找:,([0-9])/+([0-9]+)/+([0-9]+) 替换:,0 / /

第 2 步(日期填充):

查找:([0-9]+)/+([0-9])/+([0-9]+) 替换:/0/

第 3 步(美国转换):

查找:([0-9]+)/+([0-9]+)/+([0-9]+) 更换:/ /

有人可以帮我转换时间吗?

regex notepad++
1个回答
0
投票

要将 PM 时间转换为 24 小时,您需要执行(算术)加法。

正则表达式是错误的工具。除非您愿意将“01 PM”替换为“13”,“02 PM”替换为“14”,“03 PM”替换为“15”,...等等,所有这些都需要单独的替换操作。

但是如果您只想通过几个操作来完成它,那么您需要一种脚本/编程语言。

例如,以下代码片段将一次性完成转换。运行此处的代码片段,将您的输入粘贴到左侧框中,单击“转换”按钮并在右侧框中找到结果。

const [input, output, button] = document.querySelectorAll("textarea, button");

button.onclick = () => output.value = input.value.replace(
        /(\d+)\/(\d+)\/(\d{4}) (\d+):(\d+) ([AP])M/g,
        (_, mo, d, y, h, mi, p) => `${d}/${mo}/${y} ${(h%12) + 12*(p > 'A')}:${mi}`
                                   .replace(/\b\d\b/g, "0$&")
    );
textarea { width: 50%; height: 98%; box-sizing: border-box; margin: 0}
body { height: 100vh; margin: 0 }
button { position: fixed; right: 50% }
<textarea>
5/1/1999 12:05 AM
12/31/2000 9:18 AM
2/28/2001 4:56 PM
4/9/2023 12:19 PM
5/24/2019 7:23 PM
</textarea><textarea readonly></textarea><button>Convert ► </button>

© www.soinside.com 2019 - 2024. All rights reserved.