使用用户时区,日期和时间¶
项目
前提¶
- 各种设置值
设定项目 设置值 用户时区 (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 VARCHAR(100) 不 空值, 更新日期 时间戳 不 空值, 主要的 钥匙 (user_cd) );
保存从屏幕发送到数据库的日期和时间数据¶
本节描述分析从服务器端屏幕输入的日期和时间数据并将其保存在数据库中的流程。假设用户输入以下日期和时间数据,并将其发送到服务器。2012/09/19 03:46
1.解析从屏幕发送的日期和时间字符串¶
机能 初始化(要求) { 变种 inputDateStr = 要求。inputDate; //从屏幕发送的日期和时间字符串 变种 inputDate = AccountDateTimeFormatter。parseToDate(inputDateStr, AccountDateTimeFormatter。IM_DATETIME_FORMAT_DATE_INPUT, AccountDateTimeFormatter。IM_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 = AccountDateTimeFormatter。parseToDate(inputDateStr, AccountDateTimeFormatter。IM_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, AccountDateTimeFormatter。IM_DATETIME_FORMAT_DATE_STANDARD, AccountDateTimeFormatter。IM_DATETIME_FORMAT_TIME_STANDARD);使用AccountDateTimeFormatter格式化用户的日期和时间。AccountDateTimeFormatter计算登录用户所在时区的时间。得到以下结果:2012年9月19日上午3:46
在用户屏幕上显示存储在数据库中的日期¶
下面介绍如何使用用户的时区和日期显示格式将存储在数据库中的日期格式化为日期字符串,并将其显示在屏幕上。
1.从数据库获取日期¶
与“从数据库获取日期和时间数据”相同。
2.格式化为日期字符串¶
变种 outputDateStr = AccountDateTimeFormatter。格式(outputDate, AccountDateTimeFormatter。IM_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 = lastDate。getFullYear() + “-” + (lastDate。getMonth() + 1个) + “-” + lastDate。getDate();注意
请不要发送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 = DateTimeFormatter。parseToDate('yyyy-MM-dd', inputDateStr); }如果日期和时间字符串不符合用户的日期和时间输入格式,请使用DateTimeFormatter。DateTimeFormatter可以直接指定格式类型 。DateTimeFormatter使用用户的时区执行解析。