intra-mart Accel Platform 脚本开发模式编程指南 第16版2020-04-01

使用用户时区,日期和时间

前提

  • 各种设置值
设定项目 设置值
用户时区 (GMT + 09:00)日本/东京
系统时区 (格林尼治标准时间+ 00:00)UTC
日期和时间格式 英文格式
日期(标准显示) MMM d,yyyy
日期(简单显示) MMM d
日期(输入) yyyy / MM / dd
时间(标准显示) h:毫米
时间(时间戳显示) h:mm:ss a
时间(输入)| HH:mm
  • 表定义

    创建 桌子 example_table 
        user_cd     VARCHAR100  空值
        更新日期 时间戳   空值
        主要的 钥匙 user_cd
    );
    

保存从屏幕发送到数据库的日期和时间数据

本节描述分析从服务器端屏幕输入的日期和时间数据并将其保存在数据库中的流程。
假设用户输入以下日期和时间数据,并将其发送到服务器。
2012/09/19 03:46

1.解析从屏幕发送的日期和时间字符串

机能 初始化要求 {
    变种 inputDateStr = 要求inputDate; //从屏幕发送的日期和时间字符串
    变种 inputDate = AccountDateTimeFormatterparseToDateinputDateStr
            AccountDateTimeFormatterIM_DATETIME_FORMAT_DATE_INPUT
            AccountDateTimeFormatterIM_DATETIME_FORMAT_TIME_INPUT);
}
如果日期和时间字符串符合用户的日期和时间输入格式,请使用AccountDateTimeFormatter。
AccountDateTimeFormatter使用登录用户的时区执行分析。

2.在数据库中保存日期和时间数据

变种 分贝 = 新的 租户数据库();
变种 userCd = 语境getAccountContext()。userCd;
交易额开始机能() {
    分贝执行'将INERT插入example_table值(?,?)' [Db参数userCd), Db参数时间戳记inputDate)]);
});
数据库存储转换为系统默认时区的日期和时间数据。
由于Date类型的Object 没有时区,因此转换为JDK时区的日期和时间数据存储在DB TIMESTAMP类型列中。
JDK时区和系统默认时区相同。

将从屏幕发送的日期数据保存到数据库

本节介绍从分析服务器端屏幕上输入的日期数据到将其保存到数据库中的流程。

注意

即使只想从屏幕上输入日期,通常也需要考虑时间,如以下示例所示。

(示例)差旅费申请的截止日期

“最后期限”包括到23:59:59(或营业时间)为止的时间的含义。
例如,如果截止日期是总部所在地日本的9月19日(GMT + 09:00),那么檀香山(GMT-10:00)分支机构必须在9月19日上午5:00之前完成差旅费申请。必须。

假设以下值以用户的日期输入格式在屏幕上输入并发送到服务器:
2012/09/19

1.解析从屏幕发送的日期字符串

机能 初始化要求 {
    变种 inputDateStr = 要求inputDate; //从屏幕发送的日期字符串
    变种 inputDate = AccountDateTimeFormatterparseToDateinputDateStr AccountDateTimeFormatterIM_DATETIME_FORMAT_DATE_INPUT);
}
对于日期字符串,时间部分被解析为“ 00:00:00”。

2.将日期保存在数据库中

与“在数据库中保存日期和时间数据”相同。

在用户屏幕上显示存储在数据库中的日期和时间数据

本节描述使用用户的时区,日期和时间显示格式将存储在数据库中的日期和时间数据格式化为日期和时间字符串并将其显示在屏幕上的流程。

1.从数据库获取日期和时间数据

变种 分贝 = 新的 租户数据库();
变种 userCd = 语境getAccountContext()。userCd;
变种 结果 = 分贝选择'从example_table的select update_date中,user_cd =? [Db参数userCd)]);
如果 结果错误 {
    归还;
}
变种 outputDate = 结果资料[0];
数据库存储转换为系统默认时区的日期和时间数据。

2.格式化为日期和时间字符串

变种 outputDateStr = AccountDateTimeFormatter格式outputDate
        AccountDateTimeFormatterIM_DATETIME_FORMAT_DATE_STANDARD
        AccountDateTimeFormatterIM_DATETIME_FORMAT_TIME_STANDARD);
使用AccountDateTimeFormatter格式化用户的日期和时间。
AccountDateTimeFormatter计算登录用户所在时区的时间。
得到以下结果:
2012年9月19日上午3:46

在用户屏幕上显示存储在数据库中的日期

下面介绍如何使用用户的时区和日期显示格式将存储在数据库中的日期格式化为日期字符串,并将其显示在屏幕上。

1.从数据库获取日期

与“从数据库获取日期和时间数据”相同。

2.格式化为日期字符串

变种 outputDateStr = AccountDateTimeFormatter格式outputDate AccountDateTimeFormatterIM_DATETIME_FORMAT_DATE_STANDARD);
与“格式化日期字符串”相同。
得到以下结果:
2012年9月19日

在客户端,从今天开始在用户时区中生成一个三天的日期,并将最后一个日期发送到服务器端

通过此样本,您将了解在csjs中处理日期和时间数据时要注意的要点。

1.获取用户所在时区的今天

用户时区是用户在intra-mart Accel Platform注册的时区。
要使用csjs在用户时区获得“今天”,请使用intra-mart Accel Platform提供的ImDate。

注意

不要使用csjs new Date在用户时区中获取“今天”。
csjs new Date返回客户端操作系统时区中的当前日期和时间数据,但是用户时区并不总是与客户端操作系统时区匹配。
<脚本类型=“文本/ javascript” src =“ im_i18n /时区/ im_date_timezone.js”> </脚本>
<脚本类型=“文本/ javascript”>
变种 firstDate = 即时通讯现在();
</脚本>

2.从今天开始生成三天的日期

您可以使用为Date提供的标准方法。
变种 dateArray = 新的 数组();
变种 日期 = firstDate;
 变种  = 0;  < ; ++ {
    dateArray[] = 日期;
    日期setDate日期getDate() + 1个);
}

3.发送最后日期到服务器

根据年-月-日的值创建日期字符串。
变种 lastDate = dateArray[两个];
变种 lastDateStr = lastDategetFullYear() + “-” + lastDategetMonth() + 1个 + “-” + lastDategetDate();

注意

请不要发送ImDate.now()生成的日期的毫秒数。

ImDate.now()返回的Date在用户时区中的日期为“ Today”,但是纪元毫秒并不总是正确的。
原因是客户端生成日期。
Date的纪元毫秒具有在客户端OS的时区中计算的值,并且可能与在用户时区中计算的值不匹配。

注意

在服务器端为用户时区生成日期和时间数据时,请使用DateTime而不是Date。
日期是在系统默认时区中计算的,因此有必要考虑与用户时区的时差。
除非您指定时区,否则DateTime是在用户时区中计算的。
// 1996年9月19日下午3:47的日期和时间数据在用户时区
变种 dateTime = 新的 日期时间1996年 日期时间九月 19  47 0);

4.从客户端发送的日期字符串生成日期

机能 初始化要求 {
    变种 inputDateStr = 要求inputDate; //从屏幕发送的日期字符串
    变种 inputDate = DateTimeFormatterparseToDate'yyyy-MM-dd' inputDateStr);
}
如果日期和时间字符串不符合用户的日期和时间输入格式,请使用DateTimeFormatter。
DateTimeFormatter可以直接指定格式类型 。
DateTimeFormatter使用用户的时区执行解析。