gpt4 book ai didi

date - 如何设置客户特定的时区和日期

转载 作者:行者123 更新时间:2023-12-02 15:30:02 25 4
gpt4 key购买 nike

如果这是一个重复的问题,请原谅我。
我已经看过很多关于该主题的帖子。但是,尝试了许多示例之后,找不到我的问题的解决方案。

我尝试了这段代码

SimpleDateFormat sdf =  new SimpleDateFormat("EEE MMM dd yyyy", Locale.ENGLISH )
Date newDate = sdf.parse(sdf.format( new Date( dateTimeString ) ) )

但是,第二行代码始终将日期转换为我不需要的服务器特定日期和时区。我也尝试了以下
    SimpleDateFormat sdf =  new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzz", Locale.ENGLISH )


log.info "+++++++++++++++++hidden date ++++++++ " + params.hiddenGameDateTime.substring(35, 38)
log.info "x = " + sdf.format( new Date ( params.hiddenGameDateTime ))
String tzone = params.hiddenGameDateTime.substring(35, 38)
sdf.setTimeZone( TimeZone.getTimeZone( tzone ) )
log.info "Timezone = " + sdf.getTimeZone().getDisplayName()

请注意
sdf.format( new Date( dateTimeString ) )

给了我想要的结果,但是它给了我日期的字符串值,并且要存储在数据库中的实际值是数据类型的date,它不能保存字符串值。
在我的情况下,日期和时间的值将转换为PST日期和时间。我如何避免这种情况。带有时区的用户输入日期应按原样存储在数据库中,并且日期和时区无变化。

最佳答案

观察:不建议使用构造函数new Date( dateTimeString )。更好的替代方案是这样的:

SimpleDateFormat sdfOriginal = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date d = sdfOriginal.parse(dateTimeString);

此外:使用相同格式对象的类似 sdf.parse(sdf.format(...))的表达式没有太大意义。

但最重要的是,您的语句“第二行代码始终将日期转换为服务器特定的日期和时区”似乎基于以下测试输出:
System.out.println(newDate);

这隐式使用基于jvm默认时区的toString(),在您的情况下为服务器时区。但是请记住,j.u.Date的内部状态未引用任何时区。日期只是一个很长的容器,即UTC时区中从1970-01-01T00:00:00Z开始的秒数,这是一个全局时间。

附加说明:

如果您需要客户端时区(在多个用户位于不同时区的情况下)创建用户特定的格式化日期字符串,则确实需要在数据库中存储每个用户的时区首选项,因此可以使用此用于在表达式中输出的信息,例如:
SimpleDateFormat sdf = new SimpleDateFormat("{pattern}";
sdf.setTimeZone(TimeZone.getTimeZone("{user-preference-time-zone}");
String userOutput = sdf.format(date);

关于date - 如何设置客户特定的时区和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com