You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中解析iText7获取的PDF ISO日期字符串?

在VB.NET中解析PDF ISO日期字符串

PDF的日期格式以D:开头,后续为YYYYMMDDHHmmSS±HH'mm'(或Z表示UTC时区),例如你提供的D:20220817113241+00'00'。以下是两种可行的解析方案:

方法一:字符串替换后直接解析

通过简单的字符串清理,将PDF日期格式转换为.NET可识别的格式,再用DateTimeOffset.ParseExact解析:

' 原始PDF日期字符串
Dim pdfDateStr As String = "D:20220817113241+00'00'"

' 1. 移除开头的"D:"前缀
Dim cleanedStr As String = pdfDateStr.Substring(2)

' 2. 将时区部分的单引号替换为冒号,适配.NET的时区格式
cleanedStr = cleanedStr.Replace("'", ":")

' 3. 定义匹配的格式字符串
Dim dateFormat As String = "yyyyMMddHHmmsszzz"

' 4. 解析为DateTimeOffset(包含时区信息)
Dim dateOffset As DateTimeOffset = DateTimeOffset.ParseExact(cleanedStr, dateFormat, Globalization.CultureInfo.InvariantCulture)

' 可按需转换为本地时间或UTC时间
Dim localDateTime As DateTime = dateOffset.LocalDateTime
Dim utcDateTime As DateTime = dateOffset.UtcDateTime

方法二:正则表达式提取字段构造日期

如果需要更灵活的处理(比如兼容部分格式不完整的PDF日期),可以用正则表达式提取各个时间字段,手动构造DateTimeOffset:

Imports System.Text.RegularExpressions

Dim pdfDateStr As String = "D:20220817113241+00'00'"
' 匹配PDF日期格式的正则表达式
Dim dateRegex As New Regex("D:(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})([+-])(\d{2})'(\d{2})'")
Dim matchResult As Match = dateRegex.Match(pdfDateStr)

If matchResult.Success Then
    ' 提取各个时间分量
    Dim year = Integer.Parse(matchResult.Groups(1).Value)
    Dim month = Integer.Parse(matchResult.Groups(2).Value)
    Dim day = Integer.Parse(matchResult.Groups(3).Value)
    Dim hour = Integer.Parse(matchResult.Groups(4).Value)
    Dim minute = Integer.Parse(matchResult.Groups(5).Value)
    Dim second = Integer.Parse(matchResult.Groups(6).Value)
    Dim sign = matchResult.Groups(7).Value
    Dim offsetHour = Integer.Parse(matchResult.Groups(8).Value)
    Dim offsetMinute = Integer.Parse(matchResult.Groups(9).Value)
    
    ' 计算时区偏移量
    Dim timeOffset As TimeSpan = New TimeSpan(offsetHour * If(sign = "+", 1, -1), offsetMinute, 0)
    
    ' 构造带时区的DateTimeOffset对象
    Dim targetDate As New DateTimeOffset(year, month, day, hour, minute, second, timeOffset)
    
    ' 后续按需使用即可
    Console.WriteLine(targetDate.LocalDateTime.ToString())
End If

兼容特殊情况

如果遇到以Z结尾的UTC日期(如D:202208171132Z),只需先将Z替换为+00:00,再用方法一解析即可:

Dim pdfDateStr As String = "D:202208171132Z"
Dim cleanedStr As String = pdfDateStr.Substring(2).Replace("Z", "+00:00")
Dim dateOffset As DateTimeOffset = DateTimeOffset.ParseExact(cleanedStr, "yyyyMMddHHmmzzz", Globalization.CultureInfo.InvariantCulture)

内容的提问来源于stack exchange,提问作者tmighty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:48:23