网格中的日期格式

时间:2016-03-29 19:18:21

标签: visual-foxpro foxpro

我试图在网格中显示日期列,如下所示:" dd-mm-yyyy"。在dbf表中,日期以这种格式存储:" YYYY-MM-DDThh:mm:ss"在一个字符字段中。 网格是从这个光标创建的:

select id,beginningDate,endDate,cnp from doc ORDER BY id desc INTO CURSOR myCursor

我希望这样的事情:

select id,convert(beginningDate, Datetime,"dd-mm-yyyy"),endDate,cnp from doc ORDER BY id desc INTO CURSOR myCursor

2 个答案:

答案 0 :(得分:0)

Fox没有名为convert()的内置函数,也不能直接处理非标准的日期/时间字符串格式。

将给定格式的字符串foo(“YYYY-MM-DDThh:mm:ss”)转换为日期/时间值的快速而又脏的方法是

ctot("^" + chrtran(foo, "T", " "))

插入符号将输入标记为与语言环境无关的标准格式,它与输入格式的区别仅在于具有空格而不是“T”。

您可以通过ttod()函数从中提取日期部分,或者只是从字符串中提取日期部分并将其转换为:

ctod("^" + left(foo, 10))

Fox的控件 - 包括网格中的控件 - 通常使用配置的Windows系统格式(假设set("SYSFORMATS") == "ON");您可以通过使用SET DATE命令来覆盖它。

在大多数其他语言中似乎没有基于掩码的日期格式化选项。 dtoc()ttoc()不接受格式字符串,transform()采用格式字符串,但是会轻易忽略日期值。

答案 1 :(得分:0)

我和Tamar谈论这个问题,你应该使用日期时间字段。

因为无论如何你都是这样存储的,所以你可以转换'到日期时间使用内置的强制转换功能(或者早于VFP9的版本中的ttod(ctot()) - 在任何一种情况下你都不需要删除T字符):

select id, ;
  Cast(Cast("^"+beginningDate as datetime) as date) as beginningDate, ;
  endDate,cnp ;
  from doc ;
  ORDER BY id desc ;
  INTO CURSOR myCursor ;
  nofilter

在网格或任何其他文本框控件中,您可以使用DateFormat属性控制其显示样式。即:

* assuming it is Columns(2). 11 is DMY
thisform.myGrid.Columns(2).SetAll('DateFormat', 11)