JS/Java 中任何城市的夏令时时间
Posted
技术标签:
【中文标题】JS/Java 中任何城市的夏令时时间【英文标题】:Time with DST for any city in JS/Java 【发布时间】:2015-05-22 04:36:31 【问题描述】:我想要一个可以按以下方式工作的代码。 应自动处理夏令时的8-10个城市的显示时间。
For example : Melbourne observes DST, a API using which I can fetch the current time based on location without any hardcode done for DST calculation.
目前正在运行的代码基于硬编码值。它选择系统时间转换为 GMT,然后根据位置添加/减去偏移量。
然后根据日期计算 DST 并适当添加。
但我想使用一些 API 来删除硬编码的值,我正在尝试使用下面的代码。
The below code giving time for IST/GMT, but when I put AEST/AEDT it doesnt give the correct time.
public class DateFormatter
public static String formatDateToString(Date date, String format,
String timeZone)
// null check
if (date == null) return null;
// create SimpleDateFormat object with input format
SimpleDateFormat sdf = new SimpleDateFormat(format);
// default system timezone if passed null or empty
if (timeZone == null || "".equalsIgnoreCase(timeZone.trim()))
timeZone = Calendar.getInstance().getTimeZone().getID();
// set timezone to SimpleDateFormat
sdf.setTimeZone(TimeZone.getTimeZone(timeZone));
// return Date in required format with timezone as String
return sdf.format(date);
public static void main(String[] args)
//Test formatDateToString method
Date date = new Date();
System.out.println("Default Date:"+date.toString());
System.out.println("System Date: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", null));
System.out.println("System Date in PST: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "PST"));
System.out.println("System Date in IST: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "IST"));
System.out.println("System Date in GMT: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "GMT"));
System.out.println("System Date in CT: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "BDT"));
【问题讨论】:
不要使用Calendar
或Date
。使用 java 8 time API 或 jodatime。
我工作的服务器没有 Java 8,我们目前只使用 Java 6,所以请相应地提出建议
嗨,安迪,你有任何关于区域的例子吗?我用过它,它给了我时间,ISO 格式没有转换为 UTC
您可以使用DateTimeZone.forID
获取特定区域的DateTimeZone
实例。请注意,您可能需要使用比 3 个字母更好的时区名称,例如CST 是模棱两可的。您可以使用new DateTime()
获取当前时间,然后通过调用dateTimeInstance.withZone(dateTimeZoneInstance)
将其转换为不同的时区
【参考方案1】:
import java.time.LocalTime;
import java.time.ZoneId;
public class Main
public static void main(String... args)
ZoneId zone2 = ZoneId.of("America/Santiago");
LocalTime now2 = LocalTime.now(zone2);
System.out.println(now2);
Use the below link to know the timezones
http://joda-time.sourceforge.net/timezones.html
【讨论】:
但是上面的代码在Java8中可以工作,有谁知道java6的解决方案【参考方案2】:package com.java.test;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import javax.swing.text.ZoneView;
public class TestJavaCode
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
try
Calendar cal = GregorianCalendar.getInstance();
TimeZone tzone = cal.getTimeZone();
tzone.useDaylightTime();
System.out.println("Timezone:"+tzone.getDisplayName());
TimeZone tzone1 = TimeZone.getTimeZone("Canada/Central");
TimeZoneIDProvide.getTimeZoneID(TimeZoneID.US_EASTERN).getTimeZone();
Calendar cal1 = new GregorianCalendar(tzone1);
cal1.setTimeInMillis(cal.getTimeInMillis());
System.out.println("Time in US Hour: "+cal1.get(Calendar.HOUR));
System.out.println("Time in US Min: "+cal1.get(Calendar.MINUTE));
System.out.println("Time in US Sec: "+cal1.get(Calendar.SECOND));
catch(Exception e)
System.out.println("Exception caught:"+e);
【讨论】:
以上是关于JS/Java 中任何城市的夏令时时间的主要内容,如果未能解决你的问题,请参考以下文章