我在 Yii2 应用程序中设置了时区,如 config/web.php 中的文档所述:
'timeZone' => 'Europe/Berlin',
Run Code Online (Sandbox Code Playgroud)
但是:这仅对 Yii2 有效,显然不适用于 PHP 函数,例如date(). PHP 时区设置保持不变,因此 PHP 和 Yii2 之间存在差异。
如何使 Yii2 时区成为根据 Yii2 配置中的时区设置设置 PHP 时区的领先时区?
编辑
时区是在应用程序组件中设置的\Yii::$app,而不是在格式化程序组件中设置的。
我无法修改php.ini文件。
我的移动时区是 GMT+7,我有一个代码可以将特定日期时间(GMT+0)转换为特定时区(GMT+3):
var strDate = "2020-07-10 04:00:00+0000"
var result: Date?
var dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ")
dateFormatter.timeZone = TimeZone.getTimeZone("Asia/Jerusalem")
result = dateFormatter.parse(strDate)
Run Code Online (Sandbox Code Playgroud)
问题是结果总是返回“ Fri Jul 10 11:00:00 GMT+07:00 2020 ”
,但我预计它将返回日期对象“ Fri Jul 10 07:00:00 GMT+03:00 2020 ”,知道是什么我的代码有问题吗?
客户端希望查看 Windows 时区,即此处https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-valuesTime列中的时区,但使用 UTC 而不是 GMT。
并且还想查看缩写。但我找不到任何官方的 Windows 时区缩写列表。我发现的是 IANA 缩写。
我们将把 Windows 时区转换为 IANA 时区以处理时间。
但问题是 IANA 缩写=Windows 时区缩写吗?如果没有,我在哪里可以找到 Windows 缩写规则列表?
我正在尝试在java中将pst时间戳转换为gmt
我有一个带有时间戳的字符串2021-03-23T22:00:00.669-07:00。我将如何处理该字符串并将其转换为 GMT 时间戳?
Run Code Online (Sandbox Code Playgroud)2021-03-24T05:03:00.669Z
我做了一些我尝试过的事情,但还没有去过任何地方
//Date date = new Date(str);
String s = str;
DateFormat pstFormat = new SimpleDateFormat();
DateFormat gmtFormat = new SimpleDateFormat();
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
TimeZone pstTime = TimeZone.getTimeZone("PST");
pstFormat.setTimeZone(gmtTime);
gmtFormat.setTimeZone(pstTime);
System.out.println("GMT Time: " + pstFormat.format(s));
System.out.println("PST Time: " + gmtFormat.format(s));
Run Code Online (Sandbox Code Playgroud)
结果java.lang.IllegalArgumentException: Cannot format given Object as a Date在这一行:
System.out.println("GMT Time: " + pstFormat.format(s));
Run Code Online (Sandbox Code Playgroud) 我的数据库中有多次如下所示:
String summerTime = "2022-07-21T10:00:00Z";
String winterTime = "2022-11-21T10:00:00Z";
Run Code Online (Sandbox Code Playgroud)
另一方面,我想根据自定义时区获取这些日期的时间部分,我拥有的时区如下所示:
GMT-03:00
GMT-02:00
GMT-01:00
GMT+02:00
GMT+01:00
....
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下代码提取时间部分时:
ZoneId tz = ZoneId.of("GMT+01:00");
ZonedDateTime date1 = ZonedDateTime.parse(summerTime).withZoneSameInstant(tz.toZoneId());
ZonedDateTime date2 = ZonedDateTime.parse(winterTime).withZoneSameInstant(tz.toZoneId());
Run Code Online (Sandbox Code Playgroud)
我得到:
11:00
11:00
Run Code Online (Sandbox Code Playgroud)
但如果您仔细观察,即使在夏季或冬季约会,时间也是相同的。
我期望得到:
12:00 // <----- correct
11:00 // <----- correct
Run Code Online (Sandbox Code Playgroud)
我找到了解决问题的方法,即使用时区的全名而不是缩写:
ZoneId tz = ZoneId.of("Europe/Paris");
Run Code Online (Sandbox Code Playgroud)
这给了我正确的回应:
12:00
11:00
Run Code Online (Sandbox Code Playgroud)
但我不能使用它,因为我应该只使用缩写。
我的问题:
土耳其有两个TimeZone GMT + 2和GMT + 3.我想将GMT + 2日期更改为GMT + 3,但我希望保护GMT + 2 TimeZone中的小时和分钟.
我想花几个小时和几分钟,然后将这些值设置为GMT + 3 TimeZone日期.结果必须没有小时和分钟的变化,但时区必须只是改变.在功能toconvert日期必须是GMT + 2格式,但返回值必须是GMT + 3格式.怎么做清楚?
public static Date convertTimezone(Date toConvert) {
Date date = new Date();
date.setYear(toConvert.getYear());
date.setMonth(toConvert.getMonth());
date.setHours(toConvert.getHours());
date.setMinutes(toConvert.getMinutes());
return date;
}
Run Code Online (Sandbox Code Playgroud) 我通过XML文件提供了以下日期
2013-12-13T19:00:00+01:00
Run Code Online (Sandbox Code Playgroud)
我希望将它作为DateTime存储在我的数据库中,并使用ZERO UTC偏移量.
不幸的是,我的网络服务器有以下TimeZone信息,它会破坏我的转换逻辑......
-06:00:00
(UTC-06:00) Central Time (US & Canada)
Central Standard Time
Run Code Online (Sandbox Code Playgroud)
我怎样才能完成这个?我完全迷失了!
我正在通过 tzselect 更改时区,但在注销时,此时区更改为默认时区。如何永久进行此更改?
服务器时区也应该反映在 mysql 时区上。这该怎么做 ?
我搜索通过这样做我可以获得任何国家的时区
var la = moment.tz("America/Los_Angeles").format('YYYY-MM-DD HH:mm:ssZ');
Run Code Online (Sandbox Code Playgroud)
但是当我这样做California时说没有可用的时区?
运行小提琴运行示例
SOLUTION :America/Tijuana have same timezone as America/California
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码段.
TimeZone tz = TimeZone.getTimeZone("GMT");
System.out.println(tz);
Calendar cal = Calendar.getInstance();
cal.set(2017, Calendar.DECEMBER, 25);
System.out.println("before setting time zone: " + cal.getTime());
cal.setTimeZone(tz);
System.out.println("after setting time zone: " + cal.getTime());
Run Code Online (Sandbox Code Playgroud)
结果如下:
sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
before setting time zone: Mon Dec 25 22:39:53 EST 2017
after setting time zone: Mon Dec 25 22:39:53 EST 2017
Run Code Online (Sandbox Code Playgroud)
在时区更改后,为什么日期的打印输出仍显示EST?不应该是GMT吗?