关于日期的格式
日期显示有年月日,但是我想去掉年,仅显示月日,怎么搞啊,有没有简单的函数啊,查了下书,好像没有简单的函数啊比如:2015-1-5,显示是1月5日。
程序代码:
CLEAR
dd1 = CREATEOBJECT("MyDate", 2015, 1, 5) && 用指定日期创建一个类型为myData的实例对象
dd2 = CREATEOBJECT("MyDate", NULL, NULL, NULL) && 用默认日期创建一个类型为myData的实例对象
dd1.FormatMask = "YYYY-M-DD"
? dd1.ToString()
dd1.FormatMask = "YYYY年MM月DD日"
? dd1.ToString()
dd1.FormatMask = "YY年MM月DD日"
? dd1.ToString()
dd1.FormatMask = "YY/MM-DD"
? dd1.ToString()
? dd2.ToString()
RELEASE ALL LIKE dd* && 如果dd不是局部变量则应手动从内存中释放
RETURN
* 自定义日期类
DEFINE CLASS MyDate AS Custom
* 年、月、日属性,任何一个为零,均返回"无效日期"
Year = 0
Month = 0
Day = 0
* 输出格式掩码属性
* YYYY: 年份格式,可为4位YYYY或2位YY
* MM: 月份,2位时自动在左边补零,1位时不补零
* DD: 日,2位时自动在左边补零,1位时不补零
* 年月日之间的分隔字符(串)可任意
FormatMask = "YYYY-MM-DD" && 默认格式
* 用指定年、月、日初始化对象,若任一参数为NULL,则取当前系统日期对应值
PROCEDURE Init(tnYear, tnMonth, tnDay)
IF ISNULL(tnYear)
tnYear = YEAR(DATE())
ENDIF
IF ISNULL(tnMonth)
tnMonth = MONTH(DATE())
ENDIF
IF ISNULL(tnDay)
tnDay = DAY(DATE())
ENDIF
WITH This
IF .CheckValidity(tnYear, tnMonth, tnDay)
.Year = tnYear
.Month = tnMonth
.Day = tnDay
ENDIF
ENDWITH
ENDPROC
* 检查日期的合法性
HIDDEN FUNCTION CheckValidity(tnYear, tnMonth, tnDay)
LOCAL lcCentury, lcDate, llValid
lcCentury = SET("Century")
lcDate = SET("Date")
SET DATE TO ANSI
SET CENTURY ON
llValid = !EMPTY(CTOD(TRANSFORM(tnYear) + "." + TRANSFORM(tnMonth) + "." + TRANSFORM(tnDay)))
SET CENTURY &lcCentury
SET DATE TO &lcDate
RETURN llValid
ENDFUNC
* 把日期转换为字符串
FUNCTION ToString
WITH This
RETURN IIF(!EMPTY(.Year * .Month * .Day), .SetYear(.SetMonth(.SetDay(.FormatMask))), "无效日期")
ENDWITH
ENDFUNC
*-- 以下为类的隐藏方法 ---*
* 设置年份
HIDDEN FUNCTION SetYear(tcMask)
LOCAL lnLength, lnPos, lcYear
lnLength = OCCURS("Y", tcMask)
lnPos = AT("Y", tcMask)
lcYear = RIGHT(TRANSFORM(This.Year), lnLength)
RETURN STRTRAN(tcMask, REPLICATE("Y", lnLength), lcYear)
ENDFUNC
* 设置月份
HIDDEN FUNCTION SetMonth(tcMask)
LOCAL lnLength, lnPos, lcMonth
lnLength = OCCURS("M", tcMask)
lnPos = AT("M", tcMask)
lcMonth = IIF(lnLength > 1, PADL(This.Month, lnLength, "0"), TRANSFORM(This.Month))
RETURN STRTRAN(tcMask, REPLICATE("M", lnLength), lcMonth)
ENDFUNC
* 设置日
HIDDEN FUNCTION SetDay(tcMask)
LOCAL lnLength, lnPos, lcDay
lnLength = OCCURS("D", tcMask)
lnPos = AT("D", tcMask)
lcDay = IIF(lnLength > 1, PADL(This.Day, lnLength, "0"), TRANSFORM(This.Day))
RETURN STRTRAN(tcMask, REPLICATE("D", lnLength), lcDay)
ENDFUNC
ENDDEFINE
