Если вы используете Windows, вы можете использовать WinApi GetDateFormat
функция. Для этой функции вам необходимо создать SYSTEMTIME
структуру. Также вам необходимо использовать Language Identifier Constants and Strings
< /a> и Day, Month, Year, and Era Format Pictures
a> разделы для настройки языка и формата даты и времени.
Вот пример:
'Declarations
Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Declare Function GetDateFormat Lib "kernel32" Alias "GetDateFormatA" (_
Byval Locale As Long,_
Byval dwFlags As Long,_
lpDate As SYSTEMTIME,_
Byval lpFormat As String,_
Byval lpDateStr As String,_
Byval cchDate As Long) As Long
Function FormatDate(value As Variant, locale As Long, formatString As String) As String
Dim buffer As String, systemTime As SYSTEMTIME
systemTime.wYear = Year(value)
systemTime.wMonth = Month(value)
systemTime.wDay = Day(value)
buffer = String(255, 0)
GetDateFormat locale&, 0, systemTime, formatString$ , buffer, Len(buffer)
FormatDate$ = Left$(buffer, Instr(1, buffer, Chr$(0)) - 1)
End Function
'Usage
MessageBox FormatDate(Now, &h40c, "dd MMM yyyy")
'&h40c - is fr-FR locale (0x040c)
Другой способ — использовать LS2J. Для этого вы можете использовать класс SimpleDateFormat
и его format
а> метод. Также вам необходимо использовать класс Locale
и < класс href="http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html" rel="nofollow">Calendar
для установки языка и даты.
Вот пример:
'Declarations
Uselsx "*javacon"'Include this for using Java objects in LotusScript
Function FormatDate(value As Variant, language As String, country As String, formatString As String) As String
Dim javaSession As New JavaSession
Dim localeClass As JavaClass
Dim locale As JavaObject
Dim calendarClass As JavaClass
Dim calendar As JavaObject
Dim dateFormatClass As JavaClass
Dim dateFormat As JavaObject
Set localeClass = javaSession.GetClass("java/util/Locale")
Set locale = localeClass.CreateObject("(Ljava/lang/String;Ljava/lang/String;)V", language$, country$)
Set calendarClass = javaSession.GetClass("java/util/Calendar")
Set calendar = calendarClass.GetMethod("getInstance", "()Ljava/util/Calendar;").Invoke()
'You need to subtract 1 from month value
Call calendar.set(Year(value), Month(value) - 1, Day(value))
Set dateFormatClass = javaSession.GetClass("java/text/SimpleDateFormat")
Set dateFormat = dateFormatClass.CreateObject("(Ljava/lang/String;Ljava/util/Locale;)V", formatString$, locale)
FormatDate$ = dateFormat.format(calendar.getTime())
End Function
'Usage
MessageBox FormatDate(Now, "fr", "FR", "dd MMM yyyy")
В этом примере я использовал этот конструктор для получения объекта Locale
. Коды языков можно получить здесь, а коды стран — здесь.
Для объекта SimpleDateFormat
я использовал этот конструктор.
person
nempoBu4
schedule
13.06.2014