相关疑难解决方法(0)

如何存储重复日期,记住夏令时

我在我的数据库中存储事件.我有'开始'和'结束'日期时间,'ticket_start'和'tickets_end'(用于门票销售实际开始/结束时 - 而不是实际事件的开始/结束).

到目前为止,我已经构建了一些方法来完成所有有趣的事情,例如在保存之前将日期/时间转换为GMT,然后返回到各自的时区进行显示.

我将时区存储在varchar字段中,其值为"America/New_York".

但是 - 现在我需要开始处理,如果用户想要允许重复事件.我以前做过,并没有那么重要,但从来没有涉及多个时区.

起初,我认为这没什么大不了的,但后来意识到 - 如果最初的开始日期是7月(例如),并且它每个月重复一年,在某些时候,夏令时将会成功因此,GMT的转换将以不同的方式改变时间.一个月,当转换为12:00时,它会将其更改为-5,然后,由于DST,它会将其更改为-4.

我目前的想法是,我将存储一个'dst'minitint(1),以确定是否在DST期间输入了开始/结束日期,然后在必要时制作一个方法将时间改变一小时.

但是 - 想想我会在这里问这里或许这是一个"正常",或者是一件我想不到的简单事情.

(cakephp 2.4.x)

php mysql datetime cakephp dst

35
推荐指数
1
解决办法
1万
查看次数

用于多时区应用程序的Java日历,日期和时间管理

我正在设计一个调度Web应用程序.我希望用户可以在几个不同的时区和区域设置中添加事件.挑战是正确呈现这些事件.

因此,作为一个例子:
如果用户在EST时区并且正在查看由另一个用户在PST中添加的网络研讨会事件,我想将事件的实际PST时间转换为查看者的本地时间.因此,如果事件安排在太平洋标准时间下午2点,那么它应显示为美国东部时间下午5点.

我还要小心,如果有数千个事件可能需要从实际事件时间转换到查看者的本地时间,性能不会受到影响.

所有的想法和意见都表示赞赏.
TIA

java timezone calendar date

12
推荐指数
1
解决办法
5677
查看次数

不带时区的xsd:dateTime的语义及其转换为Date

我有一个关于XML Schema的内置类型的问题xsd:dateTime

xsd:dateTime没有时区的确切语义是什么?例如 1970-01-01T00:00:00

我已经阅读了许多XML Schema规范文档,但是找不到如何处理它。

具体来说,我想了解如何正确地转换xsd:dateTime为Date 对象(如like java.util.Date或JavaScript Date)。

旁注:我非常了解Java util类,例如DatatypeConverterDatatypeFactory,我想找到定义如何进行此转换的XML Schema规范。

Date该类的问题(在Java和JavaScript中)是这些类确实具有时区(默认为本地时区)。如果我xsd:dateTime在输入中遇到了没有时区的问题,那么我就不得不以某种方式离开,我应该假设哪个时区。否则,我无法将其转换为时区值(如Date)。

现在的问题是,我应该假设什么。我在这里看到以下选项:

  • 假设有一些默认值,例如UTC。
  • 假定处理器的本地时区。

我真的不喜欢第二种选择。这完全是随机的!在我的机器上,如果我运行

System.out.println(DATATYPE_FACTORY
    .newXMLGregorianCalendar("1970-01-01T00:00:00")
    .toGregorianCalendar().getTime().getTime());
Run Code Online (Sandbox Code Playgroud)

对于GMT + 1,GMT或GMT-1,我将得到-3600000、0、3600000(以及更多变体,具体取决于夏季时间。这是如此武断,我真的没有得到。这是否意味着当我们拥有具有以下元素的XML文档

<date-time>1970-01-01T00:00:00</date-time>
Run Code Online (Sandbox Code Playgroud)

我们实际上不知道,确切的时间瞬间是什么意思?

第一种选择(假设UTC)对我来说似乎更有效,但这显然不是(至少)Java工具正在做的事情。

因此,能否有人给我一个指向规范的指针,该规范定义了无时区的语义xsd:dateTime

谢谢。

更新:

当前的发现是:

  • 未指定的时区与“未指定”的时区具有完全相同的语义,也就是说,您不能盲目地假定处理器的UTC或本地时区或其他任何内容。这是一个本地时区,但是哪个时区-您真的不知道。
  • 基本上,这意味着严格来说您不能转换xsd:dateTime为具有特定时区的Date对象-除非以某种方式对不存在的时区进行了假设。
  • 作为工具提供者,我无法真正做出这种明智的假设。我对数据或其语义没有任何背景。
  • 这使我得出以下结论:工具用户必须提供这样的假设-显式或隐式。

我的解决方案如下:

  • 在我的库中,我有一个所谓的context对象,它提供XML游行上下文(JAXB的模拟JAXBContext)。我将使用诸如getDefaultTimezoneOffset()和的方法扩展该对象。setDefaultTimezoneOffset(int timezoneOffset)
  • 默认情况下,此方法将返回一些默认值。我目前更喜欢0(UTC)。但是也可以是本地时区(就像Java工具一样)。
  • 欢迎图书馆用户提供其他默认时区偏移,但并非严格要求(此处为“隐式”假设)
  • 当分析xsd:dateTimeDate,如果传入的值是缺少一个时区,它将被假定为context.getDefaultTimezoneOffset()
  • 我还将注意到解析的Date对象中的传入时区(或缺少时区)。例如在诸如此类的属性originalTimezoneOffset中。这不会修改 …

xml timezone datetime xsd jaxb

5
推荐指数
1
解决办法
3339
查看次数

标签 统计

datetime ×2

timezone ×2

cakephp ×1

calendar ×1

date ×1

dst ×1

java ×1

jaxb ×1

mysql ×1

php ×1

xml ×1

xsd ×1