Foxtable(狐表)用户栏目专家坐堂 → 如何从字符串中提取日期


  共有1750人关注过本帖树形打印复制链接

主题:如何从字符串中提取日期

帅哥哟,离线,有人找我吗?
ZJZK2018
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
如何从字符串中提取日期  发帖心情 Post By:2023/10/16 0:26:00 [显示全部帖子]

如何从字符串中提取日期和时分


Dim s As String  = "5.2?投标文件递交截止时间20231030 14:30; "   '或 “1、投标文件递交截止时间2023年10月16日15时30分;”

Dim d As Date

For i As Integer = 0 To s.Length - 10

    If Date.TryParse(s.SubString(i,10),d) OrElse Date.TryParse(s.SubString(i,9),d) OrElse Date.TryParse(s.SubString(i,8),d) Then

        output.show(d)

        Exit For

    End If

Next


上面代码只能显示:20231030日 如何增加时分:14:30

需求:20231030日 14:30

[此贴子已经被作者于2023/10/16 2:36:41编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/16 10:26:00 [显示全部帖子]

在表事件DataColChanged中写入,提取日期:
Select Case e.DataCol.Name
     Case "招标文件的获取"
        Dim s As String = e.DataRow("招标文件的获取")
        Dim d As String
        If s > "" Then
            Dim t As Integer = s.IndexOf("下载时间") +4
            Dim nmb As String = "0123456789-年月日至"
            For si As Integer = t To s.Length -1
                If s.Contains(s(si)) Then
                    d = d & s(si)
                End If
            Next
        End If
        e.DataRow("下载时间") = d
End Select

 e.DataRow("招标文件的获取") =   2.招标文件网上下载时间:2023年9月28日至 2023年10月11日。 
结果是       :2023年9月28日至 2023年10月11日。  这里的:,。是不需要的
我需的结果是2023年9月28日至 2023年10月11日  

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/17 9:04:00 [显示全部帖子]

为什么会出现多个日期?只需要一个就可以如何修改下面代码?

For Each r As Row In Tables("招标公告").Rows
    Dim s As String  = r("招标条件")
    Dim d As String
    Dim t As Integer = s.IndexOf("时间") +4
    Dim nmb As String = "0123456789-年月日时分至"
    For i As Integer = t To s.Length - 1
        If nmb.contains(s(i))
            d = d & s(i)
        End If
    Next
    output.show(d)
Next
[此贴子已经被作者于2023/10/17 9:26:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/17 11:18:00 [显示全部帖子]

源数据是表的单元格值,正确结果是提取一个值


图片点击可在新窗口打开查看此主题相关图片如下:512247447.jpg
图片点击可在新窗口打开查看

出现错误是遍历一次增加一个日期


图片点击可在新窗口打开查看此主题相关图片如下:16975388.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2023/10/17 11:22:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/1 10:16:00 [显示全部帖子]

为什么下面这些提取不日期,年月日 时分:
5.2投标文件递交截止时间(投标截止时间,下同):2022年9月6日9时30分?
5.2投标文件递交截止时间(投标截止时间,下同):2022年9月5日9时30分?
5.2?投标文件递交截止时间2022年9月1日9:30;
5.2投标文件递交截止时间:2022年8月31日9:30?
5.2投标文件递交截止时间:2022年8月31日9:30?

Dim s As String  = "5.2?投标文件递交截止时间2023103014:30; "

Dim d As Date

For i As Integer = 0 To s.Length - 16

    If Date.TryParse(s.SubString(i,16),d) OrElse Date.TryParse(s.SubString(i,15),d) OrElse Date.TryParse(s.SubString(i,14),d) Then

        output.show(d)        '2023-10-30 14:30:00

        Exit For

    End If

Next

[此贴子已经被作者于2023/11/1 10:19:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/1 12:48:00 [显示全部帖子]

老师还是不行?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:666666.table




图片点击可在新窗口打开查看此主题相关图片如下:1698811909727.jpg
图片点击可在新窗口打开查看



 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/1 13:51:00 [显示全部帖子]

有何办法处理?


 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/1 22:56:00 [显示全部帖子]

老师好
2023 1 12 9 30   如何变成 :2023-01-12 09:30
2023 08 1 11 30 如何变成 :2023-08-01 11:30
[此贴子已经被作者于2023/11/1 22:58:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/2 11:10:00 [显示全部帖子]

谢谢老师,基本解决,如何9月变成09    
Dim st As String = “1)投标文件递交截止时间:202291615:30:00,地点为杭州市曙光路140号黄龙"

    If st.IndexOf("截止时间") > -1 Then
        st = st.SubString(st.IndexOf("截止时间"))
        Dim sj As String = System.Text.RegularExpressions.Regex.replace(st, "[^0-9]+", " ")     '注意空格
        sj = System.Text.RegularExpressions.Regex.replace(sj, " +", " ")        '注意"空格 +"
        'Output.show(sj.Length)   '显示:2023 9 16 15 30 00
        If sj.Length > 1
            sj = sj.Trim()
            Dim sjs() As String = sj.Split(" ")
            If sjs.Count >= 5 Then
                Dim kbsj As String = sjs(0) & "-" & sjs(1) & "-" & sjs(2) & " " & sjs(3) & ":" & sjs(4)
                'msgbox(kbsj)         '显示:2023 9 16 15 30
                r("备注") = kbsj
            End If
        End If
    End If
[此贴子已经被作者于2023/11/2 11:14:43编辑过]

 回到顶部