将 DD-MMM-YYYY HH:MM:SS.SSS 转换为进度 DATETIME-TZ
Convert DD-MMM-YYYY HH:MM:SS.SSS to Progress DATETIME-TZ
是否有一种简单的方法可以将格式为 DD-MMM-YYYY HH:MM:SS.SSS 的日期时间值转换为 Progress DATETIME-TZ。例如,我试图将“15-Sep-2017 20:51:14.566”日期存储到 Progress ABL 变量中,其数据类型为 datetime-tz,格式为“99/99/9999 HH:MM:SS.SSS+ HH:MM".
我可以通过将日期、月份、年份、小时、分钟等拆分为单个变量并使用 DATE、DATETIME 等函数组合它们来实现此功能。但是,我相信应该有一些好的方法来做到这一点。谢谢你的帮助。
不用担心进度显示格式 - 只要将字符串转换为 datetime-tz
以后就可以随时使用显示格式。
在这种情况下,我认为您需要按照 "hard" 的方式进行。这是让您入门的东西。
DEFINE VARIABLE cDateString AS CHARACTER NO-UNDO.
DEFINE VARIABLE dtDate AS DATETIME-TZ NO-UNDO.
FUNCTION convertDateString RETURNS DATETIME-TZ (INPUT pcString AS CHARACTER):
DEFINE VARIABLE dtDateTz AS DATETIME-TZ NO-UNDO.
DEFINE VARIABLE cDateTz AS CHARACTER NO-UNDO.
DEFINE VARIABLE iMonth AS INTEGER NO-UNDO.
CASE ENTRY(2, pcString, "-"):
WHEN "Jan" THEN iMonth = 1.
WHEN "Feb" THEN iMonth = 2.
WHEN "Mar" THEN iMonth = 3.
WHEN "Apr" THEN iMonth = 4.
WHEN "May" THEN iMonth = 5.
WHEN "Jun" THEN iMonth = 6.
WHEN "Jul" THEN iMonth = 7.
WHEN "Aug" THEN iMonth = 8.
WHEN "Sep" THEN iMonth = 9.
WHEN "Oct" THEN iMonth = 10.
WHEN "Nov" THEN iMonth = 11.
WHEN "Dec" THEN iMonth = 12.
END CASE.
IF iMonth = 0 THEN RETURN ?.
ASSIGN
cDateTz = SUBSTRING(ENTRY(3, pcString, "-"), 1 ,4) + "-" + STRING(iMonth) + "-" + ENTRY(1, pcString, "-") + " " + ENTRY(2, pcString, " ").
dtDateTz = DATETIME-TZ(cDateTz).
RETURN dtDateTz.
END FUNCTION.
cDateString = "15-Sep-2017 20:51:14.566".
dtDate = convertDateString(cDateString).
DISPLAY dtDate FORMAT "99/99/9999 HH:MM:SS.SSS+HH:MM".
我知道这是一个旧话题,但为了其他可能发现这个的人的利益:简单的变量赋值就可以了。
DEFINE VARIABLE dt AS DATETIME.
DEFINE VARIABLE dtz AS DATETIME-TZ /* FORMAT "..." */.
dt = NOW.
dtz = dt.
DISPLAY dt SKIP dtz.
[编辑]
您可以使用会话变量 SESSION:TIMEZONE
来设置此分配中使用的时区。但在旧版本的 Progress 中存在问题,您可能需要使用启动参数 -useSessionTZ
。请参阅进度知识库文章:Inconsistency assigning datetime-tz to datetime
是否有一种简单的方法可以将格式为 DD-MMM-YYYY HH:MM:SS.SSS 的日期时间值转换为 Progress DATETIME-TZ。例如,我试图将“15-Sep-2017 20:51:14.566”日期存储到 Progress ABL 变量中,其数据类型为 datetime-tz,格式为“99/99/9999 HH:MM:SS.SSS+ HH:MM".
我可以通过将日期、月份、年份、小时、分钟等拆分为单个变量并使用 DATE、DATETIME 等函数组合它们来实现此功能。但是,我相信应该有一些好的方法来做到这一点。谢谢你的帮助。
不用担心进度显示格式 - 只要将字符串转换为 datetime-tz
以后就可以随时使用显示格式。
在这种情况下,我认为您需要按照 "hard" 的方式进行。这是让您入门的东西。
DEFINE VARIABLE cDateString AS CHARACTER NO-UNDO.
DEFINE VARIABLE dtDate AS DATETIME-TZ NO-UNDO.
FUNCTION convertDateString RETURNS DATETIME-TZ (INPUT pcString AS CHARACTER):
DEFINE VARIABLE dtDateTz AS DATETIME-TZ NO-UNDO.
DEFINE VARIABLE cDateTz AS CHARACTER NO-UNDO.
DEFINE VARIABLE iMonth AS INTEGER NO-UNDO.
CASE ENTRY(2, pcString, "-"):
WHEN "Jan" THEN iMonth = 1.
WHEN "Feb" THEN iMonth = 2.
WHEN "Mar" THEN iMonth = 3.
WHEN "Apr" THEN iMonth = 4.
WHEN "May" THEN iMonth = 5.
WHEN "Jun" THEN iMonth = 6.
WHEN "Jul" THEN iMonth = 7.
WHEN "Aug" THEN iMonth = 8.
WHEN "Sep" THEN iMonth = 9.
WHEN "Oct" THEN iMonth = 10.
WHEN "Nov" THEN iMonth = 11.
WHEN "Dec" THEN iMonth = 12.
END CASE.
IF iMonth = 0 THEN RETURN ?.
ASSIGN
cDateTz = SUBSTRING(ENTRY(3, pcString, "-"), 1 ,4) + "-" + STRING(iMonth) + "-" + ENTRY(1, pcString, "-") + " " + ENTRY(2, pcString, " ").
dtDateTz = DATETIME-TZ(cDateTz).
RETURN dtDateTz.
END FUNCTION.
cDateString = "15-Sep-2017 20:51:14.566".
dtDate = convertDateString(cDateString).
DISPLAY dtDate FORMAT "99/99/9999 HH:MM:SS.SSS+HH:MM".
我知道这是一个旧话题,但为了其他可能发现这个的人的利益:简单的变量赋值就可以了。
DEFINE VARIABLE dt AS DATETIME.
DEFINE VARIABLE dtz AS DATETIME-TZ /* FORMAT "..." */.
dt = NOW.
dtz = dt.
DISPLAY dt SKIP dtz.
[编辑]
您可以使用会话变量 SESSION:TIMEZONE
来设置此分配中使用的时区。但在旧版本的 Progress 中存在问题,您可能需要使用启动参数 -useSessionTZ
。请参阅进度知识库文章:Inconsistency assigning datetime-tz to datetime