在Notes开发中,有时会需要在月份的数字和名称之间相互转换。因为仅仅涉及到月份,用Format和DateValue函数并不方便。我们可以编写一个实用的类来解决这个问题。
%REM
Class MonthConverter
Description: Comments for Class
%END REM
Public Class MonthConverter
Private num2Name As NArray
Private num2FName As NArray
Private name2Num As Dictionary
Private fname2Num As Dictionary
%REM
Sub New
Description: Comments for Sub
%END REM
Sub New()
'initialize num2Fname
Set me.num2FName=New NArray(11)
With me.num2FName
Call .Add("January")
Call .Add("February")
Call .Add("March")
Call .Add("April")
Call .Add("May")
Call .Add("June")
Call .Add("July")
Call .Add("August")
Call .Add("September")
Call .Add("October")
Call .Add("November")
Call .Add("December")
End With
'initialize num2Name
Set me.num2Name=New NArray(11)
Dim i As Integer
For i=0 To 11
Call me.num2Name.Add(Left(me.num2FName.Container(i), 3))
Next
'initialize fname2Num
Set me.fname2Num=New Dictionary()
For i=0 To 11
Call me.fname2Num.Add(CStr(me.num2FName.Container(i)), i)
Next
'initialize name2Num
Set me.name2Num=New Dictionary()
For i=0 To 11
Call me.name2Num.Add(CStr(me.num2Name.Container(i)), i)
Next
End Sub
%REM
Function GetName
Description: Comments for Function
%END REM
Public Function GetName(num As Integer) As String
If num<1 Or num>12 Then
Exit Function
End If
me.GetName=me.num2Name.Container(num-1)
End Function
%REM
Function GetFullName
Description: Comments for Function
%END REM
Public Function GetFullName(num As Integer) As String
If num<1 Or num>12 Then
Exit Function
End If
me.GetFullName=me.num2FName.Container(num-1)
End Function
%REM
Function GetNum
Description: Comments for Function
%END REM
Public Function GetNum(monthName As String) As Integer
Dim num
num=me.name2Num.Item(monthName)
If IsEmpty(num) Then
num=me.fname2Num.Item(monthName)
End If
If Not IsEmpty(num) Then
me.GetNum=num
End If
End Function
End Class
GetName方法将月份数字转换成三字母缩写的月份名称。GetFullName方法将月份数字转换成英文月份名称。GetNum方法将月份名城转换成月份数字。其中用到的Dictionary和NArray在之前的面向对象的LotusScript的系列文章中都已经给出了。