在做海外项目时,时区是一个必须注意的点,如何获取争取指定时区的时间呢?我们来用多种方法来获取。
1、linux 命令
$ TZ='Asia/Almaty' date
Wed Sep 4 10:33:18 +05 2024
2、python
Python 3.9及以上版本内置了对ZoneInfo
包对时区有了良好的支持,所以分两种方法:
python3.9 以上
from datetime import datetime
from zoneinfo import ZoneInfo
# 设置时区为Asia/Almaty
timezone = ZoneInfo("Asia/Almaty")
# 获取当前时间并转换为指定时区
current_time = datetime.now(timezone)
# 格式化时间字符串,%z 表示时区偏移
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S %z")
print(formatted_time)
python3.9 以下
from datetime import datetime
import pytz
# 设置时区为Asia/Almaty
timezone = pytz.timezone("Asia/Almaty")
# 获取当前UTC时间并转换为指定时区
utc_now = datetime.utcnow()
current_time = timezone.normalize(utc_now.replace(tzinfo=pytz.utc))
# 格式化时间字符串,注意%z 表示时区偏移,但格式可能因平台而异
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S %z")
print(formatted_time)
3、java
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
public class TimeZoneCheck {
public static void main(String[] args) {
// 设置局部时区为Asia/Almaty
ZoneId zoneId = ZoneId.of("Asia/Almaty");
// 获取当前时间基于Asia/Almaty时区
ZonedDateTime dateTime = ZonedDateTime.now(zoneId);
// 构建一个格式化器,显示日期、时间和时区偏移
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss Z");
String formattedDateTime = dateTime.format(formatter);
// 直接打印包含时区偏移的时间字符串,无需再附加时区名称
System.out.println(formattedDateTime);
}
}
4、golang
package main
import (
"fmt"
"time"
"os"
)
func main() {
// 设置时区为Asia/Almaty
location, err := time.LoadLocation("Asia/Almaty")
if err != nil {
fmt.Println("Error loading location:", err)
os.Exit(1)
}
// 获取当前UTC时间并转换为指定时区
currentTime := time.Now().UTC()
timeInAlmaty := currentTime.In(location)
// 格式化时间字符串,%Z 表示时区缩写,%z 表示时区偏移(如+0500)
formattedTime := timeInAlmaty.Format("2006-01-02 15:04:05 MST")
fmt.Println(formattedTime)
}