在我的Play框架应用程序中,用户可以选择输入日程安排的日期,然后将日期映射到我的模型实体:
@InFuture
@As("dd/MM/yyyy HH:mm")
public Date validFrom;
这是
形式的字段<input type="text" name="schedule.validFrom" placeholder="dd/mm/yyyy hh:mm">
问题是我们的服务器在非本地时区运行,时区应该从正在进行此计划的对象中获取。
所以我事先知道这个时间表的时区是什么,我不希望用户必须在该字段中输入时区。
一个可能的解决方案是将日期作为字符串提交并进行手动验证和解析,但我想知道是否有更好的解决方案。
答案 0 :(得分:2)
手动解析可能是您的最佳选择 您可以创建自己的对象,其中包含日期和时区 然后根据InFutureCheck实施您自己的验证检查并执行时区转换。
答案 1 :(得分:0)
更好的选择是为用户提供一个时区下拉列表。例如:
String TIMEZONE_ID_PREFIXES ="^(Africa|America|Asia|Atlantic|Australia|Europe|Indian|Pacific)/.*";
String[] ids = TimeZone.getAvailableIDs();
Timezone tz = null;
for (int i=0; i<ids.length; i++) {
if (ids[i].matches(TIMEZONE_ID_PREFIXES)) {
//add TimeZone.getTimeZone(ids[i]).getDisplayName() to a drop down list
}
}
答案 2 :(得分:0)
这里的最佳做法实际上取决于您的用户是否需要查看多个时区。
如果他们不需要多个时区,那么您可以假设所有时间都是“无区域”,也就是说它们都是UTC或GMT。这是到目前为止最简单的选项。
如果用户需要查看多个时区,那么最好使用Z参数传递每个日期的时区:http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#rfc822timezone同时,在Javascript中,您可能希望使用库来创建带有时区的日期字符串,例如:http://arshaw.com/xdate/#Formatting