我直接从HTML文件中解析日期,并试图将其转换为日期。然而,这样做总是反映出一个错误;最奇怪的是,如果我直接粘贴字符串,我就可以解析。
layout := "02-01-2006 15:04:05"
t, err := time.Parse(layout, *date)
if err != nil {
fmt.Println( err)
}
收益率:
parsing time "12-06-2021 00:00:31" as "02-01-2006 15:04:05": cannot parse " 00:00:31" as "15"
然而,如果我尝试直接从字符串进行解析,它会起作用:
layout := "02-01-2006 15:04:05"
date := "12-06-2021 00:00:31"
t, err := time.Parse(layout, date)
if err != nil {
fmt.Println( err)
}
效果很好。我尝试以各种可能的方式删除空白,但问题仍然存在:
date2 := *date
date2 = strings.TrimSpace(date2)
date2 = strings.TrimRight(date2, "rn")
date2 = strings.TrimRight(date2, "n")
space := regexp.MustCompile(`s+`)
date2 = space.ReplaceAllString(date2, "")
date2 = strings.ReplaceAll(date2, " ", "")
date2 = strings.ReplaceAll(date2, "r", "")
date2 = strings.ReplaceAll(date2, "n", "")
这表明存在隐藏的符文。最后,我采用了在原始字符串(来自指针(和粘贴版本中打印实际符文的方法,这就是我得到的。
原始字符串:
0: U+0031 '1'
1: U+0033 '3'
2: U+002D '-'
3: U+0030 '0'
4: U+0037 '7'
5: U+002D '-'
6: U+0032 '2'
7: U+0030 '0'
8: U+0032 '2'
9: U+0031 '1'
10: U+00A0
12: U+0031 '1'
13: U+0030 '0'
14: U+003A ':'
15: U+0030 '0'
16: U+0030 '0'
17: U+003A ':'
18: U+0030 '0'
19: U+0030 '0'
手工粘贴字符串:
0: U+0031 '1'
1: U+0032 '2'
2: U+002D '-'
3: U+0030 '0'
4: U+0036 '6'
5: U+002D '-'
6: U+0032 '2'
7: U+0030 '0'
8: U+0032 '2'
9: U+0031 '1'
10: U+0020 ' '
11: U+0030 '0'
12: U+0030 '0'
13: U+003A ':'
14: U+0030 '0'
15: U+0030 '0'
16: U+003A ':'
17: U+0033 '3'
18: U+0032 '2'
我们马上就能发现问题:在11号位置有一个额外的符文,但由于某种原因,现在已经显示了;怎么会这样?它是什么?以及如何移除它?
U+00A0是不间断空格字符。它通常用于格式化为供人类使用的日期时间,以确保显示程序不会包装日期时间。
您可能只想先尝试用正则空格替换任何uA0
字符。
至于为什么regexp不会做任何事情,它与您的s
regexp不匹配,因为文档说它是严格的
s whitespace (== [tnfr ])