- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个 VB6 应用程序(在 COM 组件中),它使用 CDate() 获取字符串并将其转换为日期,以便存储在数据库中。
例如,根据我们希望应用程序以 dd/MM/yy 还是 MM/dd/yy 进行通话,我们必须更改 COM 应用程序的身份用户的区域设置。 (现在我们唯一的选择是 a nasty hack 。)
我们有一个用于格式化所有输出日期的日期格式字符串,并且假设日期
如果这是 .NET,我们将使用 DateTime.ParseExact 并且笑而不语。出于这个目的调用用 .NET 编写的 COM 对象是一种选择。是否有不同或更好的选择,包括围绕 Format 命令的一些黑魔法,或者根据格式字符串标记日期的长可重用函数等?
最佳答案
这应该很接近,尽管它将分隔符硬编码为“/”,并将 windows YY 年份硬编码为 50:
Private Function ParseDate(ByVal DateString As String, _
ByVal DatePattern As String) As Date
'DateString: i/j/k formatting.
'DatePattern: i/j/k formatting, each to be:
' M or MM for month position.
' D or DD for day position.
' YY or YYYY for year position, if YY
' then century windowed at 50.
Dim strStringParts() As String
Dim strPatternParts() As String
Dim intPart As Integer, intScore As Integer
Dim intMonth As Integer, intDay As Integer, intYear As Integer
Const DELIM As String = "/"
Const YYWINDOW As Integer = 50
strStringParts = Split(DateString, DELIM)
strPatternParts = Split(UCase$(DatePattern), DELIM)
For intPart = 0 To UBound(strStringParts)
If intPart > UBound(strPatternParts) Then
Err.Raise 5, "ParseDate"
End If
Select Case strPatternParts(intPart)
Case "M", "MM"
intMonth = CInt(strStringParts(intPart))
intScore = intScore Or &H1
Case "D", "DD"
intDay = CInt(strStringParts(intPart))
intScore = intScore Or &H2
Case "YY"
intYear = CInt(strStringParts(intPart))
If 0 > intYear Or intYear > 99 Then
Err.Raise 5, "ParseDate"
End If
intYear = intYear + IIf(intYear < YYWINDOW, 2000, 1900)
intScore = intScore Or &H4
Case "YYYY"
intYear = CInt(strStringParts(intPart))
If 100 > intYear Or intYear > 9999 Then
Err.Raise 5, "ParseDate"
End If
intScore = intScore Or &H4
Case Else
Err.Raise 5, "ParseDate"
End Select
Next
If intScore = &H7 Then
ParseDate = DateSerial(intYear, intMonth, intDay)
Else
Err.Raise 5, "ParseDate"
End If
End Function
关于datetime - 一个更好的 VB6 CDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1059930/
我有一个我在 8 月中旬创建的电子表格,其中有一个表格,从那时起每天都有一列。列标题是当天的日期。日期以我希望的方式显示:“dd/mm/yyyy” 但是,我有宏需要读取这些日期才能执行其工作。因为我使
Windows 中的区域设置为 MM/DD/YYYY 现在看看这两行,以及月份的变化: Sub DateBug() Debug.Print Format(CDate("11/4/1999"),
我们有一个 VB6 应用程序(在 COM 组件中),它使用 CDate() 获取字符串并将其转换为日期,以便存储在数据库中。 例如,根据我们希望应用程序以 dd/MM/yy 还是 MM/dd/yy 进
在浏览一些没有错误处理的旧代码时,我偶然发现了意外的 CDate() function行为。 Sub Test() Dim userinput as Variant userinput
我有以下代码: minDate = CDate(Table.Cell(i, 4).Range.Text) 但我收到“类型不匹配错误”。Table.Cell(i, 4)采用“dd.mm.yy”格式。 最
我有一个下拉框,项目取决于区域设置: Private Sub UserForm_Initialize() Select Case Application.International(XlApplica
我尝试在记录集中使用 CDate() 将文本字段转换为日期,但不断收到类型不匹配错误。输入文本格式为MMDDYYYY。 CDate 不识别这种格式吗?我需要一个单独的功能吗?有什么想法吗? Text
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
似乎我一直在 VBA excel 中发现罕见的错误。CDate(Now())导致“编译错误:预期:标识符”和“运行时错误:'13':类型不匹配” Cell(1,1) = Now() Date1 = C
我对 VBA 几乎一无所知,但被分配修复错误,所以请允许这个非常基本的问题: 据我所知,将空白用户表单单元格写入工作表会导致错误结果。该值必须是日期格式,所以 CDate()被使用,但这会导致 Run
我一直在我的程序中使用 CDate,但令人担忧的是,它只能在 IE 中运行。cdate(strValue) 。 如果我将 strvalue 的值作为 01/02 传递,它返回为 Wed Jan 2 e
我想将字符串“mm/dd/yy hh:mm AM/PM”转换为日期“mm/yyyy” 为什么下面的代码输出11-2-2015? Sub Test() Dim yourStringDate As
我有一列以 DD-MM-YYYY 格式存储的日期。我正在使用 VBA 的 cdate 函数循环它们以将它们转换为值 - 但是,当月份的日期为 12 或更小时,Cdate 将日期解释为 MM-DD-YY
我三周前刚刚开始学习 VBA,所以请随意批评我的代码。 我想使用 IIF 语句来执行 If 语句内的操作: Dim rng_ModPlanStart as range Dim QueryDate as
我的任务是将旧的 VB6 程序转换为 C#。我一直难以移植的一个函数是计算从二进制文件中读取的文件的生日: .BirthDate = CDate((CLng(recPatient.birthDateB
我通常避免使用 VB 的内置转换函数(CStr、CDate、CBool、CInt 等),除非我需要进行实际转换。如果我只是将对象转换为字符串,那么我通常使用 DirectCast 或 TryCas
在 Excel 2010 VBA 中,我正在测试以确保我的代码能够正确处理无效的用户输入。我正在使用 CDate 来验证日期输入。我发现输入无效日期“0/5/14”时,CDate 返回日期 5/14/
我制作了一个名为 FormatDT 的函数,并将其放在 \include\basic_function.asp 这是该函数的代码: function FormatDT(ddate,format)
我正在尝试使用 VBA 脚本将日期转换为 long。下面是代码片段 Sub test() Dim str as string Dim d as variant str="1/1
我尝试将日期值设置为具有默认值的 PreparedStatement,但该值有时会作为 JulianValue 返回。例如(假设 spanBegin 和 spanEnd 为空) Calendar ca
我是一名优秀的程序员,十分优秀!