Jython中UTC转America/Los_Angeles时区异常问题求助
问题原因
你脚本里target_calendar.getTime()返回的是Java的Date对象,这个对象本质只是一个UTC时间戳,不携带任何时区信息。调用toString()时,它会自动使用系统默认时区(你环境中的IST)来格式化输出,所以看起来返回的是IST时间,但实际上target_calendar已经完成了时区转换,只是输出环节没指定目标时区。
修正方案
方案1:用SimpleDateFormat指定时区格式化
通过SimpleDateFormat设置目标时区,将Date对象格式化为对应时区的字符串:
from java.util import Calendar, TimeZone from java.text import SimpleDateFormat def convert_utc_to_timezone(tz): utc_calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")) utc_time_in_millis = utc_calendar.getTimeInMillis() target_calendar = Calendar.getInstance(TimeZone.getTimeZone(tz)) target_calendar.setTimeInMillis(utc_time_in_millis) # 指定目标时区格式化时间 sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss z") sdf.setTimeZone(target_calendar.getTimeZone()) return sdf.format(target_calendar.getTime()) tz = "America/Los_Angeles" converted_time = convert_utc_to_timezone(tz) print("Converted Time: " + converted_time)
方案2:直接从Calendar读取目标时区字段
如果需要获取具体的时间数值(年、月、日等),可以直接从target_calendar中读取,这些字段已经是目标时区的对应值:
from java.util import Calendar, TimeZone def convert_utc_to_timezone(tz): utc_calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")) utc_time_in_millis = utc_calendar.getTimeInMillis() target_calendar = Calendar.getInstance(TimeZone.getTimeZone(tz)) target_calendar.setTimeInMillis(utc_time_in_millis) # 提取目标时区的时间字段(注意Java月份从0开始) year = target_calendar.get(Calendar.YEAR) month = target_calendar.get(Calendar.MONTH) + 1 day = target_calendar.get(Calendar.DAY_OF_MONTH) hour = target_calendar.get(Calendar.HOUR_OF_DAY) minute = target_calendar.get(Calendar.MINUTE) second = target_calendar.get(Calendar.SECOND) return f"{year}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d} ({tz})" tz = "America/Los_Angeles" converted_time = convert_utc_to_timezone(tz) print("Converted Time: " + converted_time)
内容的提问来源于stack exchange,提问作者ravvi
相关产品推荐
相关产品推荐

