【发布时间】:2018-04-14 20:53:56
【问题描述】:
我使用用 VFP 编写的数据库程序,并且我试图更改该程序生成的报告中的日期格式。 报告中的当前字段是 DATE(),它返回 DD/MM/YYYY 我希望该字段返回 DDMMYY (即没有分隔符,没有世纪和个位数的日期和月份有前导零) 有人可以告诉我应该使用的报告字段表达式来实现这一点吗? 谢谢
【问题讨论】:
标签: visual-foxpro
我使用用 VFP 编写的数据库程序,并且我试图更改该程序生成的报告中的日期格式。 报告中的当前字段是 DATE(),它返回 DD/MM/YYYY 我希望该字段返回 DDMMYY (即没有分隔符,没有世纪和个位数的日期和月份有前导零) 有人可以告诉我应该使用的报告字段表达式来实现这一点吗? 谢谢
【问题讨论】:
标签: visual-foxpro
我通过创建一个过程并将该过程称为 date2(date(), "", 2, 2, 2) 在报告字段中。
这将打印 150418
此函数也可以与默认值一起使用,即 date(date()),它将打印 15-Apr-18
FUNCTION date2(par_date, par_separtor, par_day_digit, par_month_digit, par_year_digit)
LOCAL date_return, day_t, month_t, year_t
IF VARTYPE(par_separtor) <> "C"
par_separtor = "-"
ENDIF
IF VARTYPE(par_year_digit) <> "N"
par_year_digit = 2
ENDIF
day_t = IIF(DAY(par_date)<10, '0', "") + allt(str(DAY(par_date)))
month_t = PROPER(allt(left(CMONTH(par_date),3)))
year_t = right(allt(str(year(par_date))),par_year_digit)
IF VARTYPE(par_month_digit) = "N"
month_t = IIF(MONTH(par_date)<10, '0', "") + allt(STR(MONTH(par_date)))
* MESSAGEBOX(month)
ENDIF
date_return = IIF(EMPTY(par_date), " ", day_t + par_separtor + month_t + par_separtor + year_t)
RETURN date_return
ENDFUNC
【讨论】:
如果尚未设置世纪,则在报告之前设置世纪(即使您只能在报告环境或波段代码中访问报告本身,您也可以这样做):
Set century off
那么表达式就是:
CHRTRAN(DTOC(DATE()),'/','')
或者如果您指的是日期字段:
CHRTRAN(DTOC(myDateField),'/','')
如果出于任何原因,您不能使用“设置世纪关闭”(并且它是开启的),那么稍微改变一下表达方式:
Stuff(CHRTRAN(DTOC(myDateField),'/',''),5,2,'')
也许这个更好,并且无论日期/日期时间设置如何都可以工作:
PADL(DAY(DATE())*10000+MONTH(DATE())*100+YEAR(DATE())%100,6,'0')
(如果是日期字段,则将 date() 替换为字段名称)
【讨论】: