如何在EST获得约会

时间:2012-12-25 11:41:28

标签: java date

请建议一种在美国东部时间打印日期的方法。

public Date convertToEST(Date date)
{
     // some code here
}

如果我在IST中传入日期,该方法应该在EST中返回该日期。

5 个答案:

答案 0 :(得分:4)

“方法应该在EST中返回该日期”的想法是错误的。自1970年1月1日00:00:00 GMT起,日期仅为毫秒数。它与时区无关。

答案 1 :(得分:3)

您需要以下

Date date = new Date();  

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");

// Set the formatter to use a different timezone  
formatter.setTimeZone(TimeZone.getTimeZone("EST"));  

// Prints the date in the EST timezone  
System.out.println(formatter.format(date));  

要使方法返回Date对象,您需要如下所示

public static Date convertToEST(Date date) throws ParseException {
    DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
    formatter.setTimeZone(TimeZone.getTimeZone("EST"));
    return formatter.parse((formatter.format(date)));
}

Javadoc- DateFormat.formatDateFormat.parse

答案 2 :(得分:2)

更改java中的时区

public class TimeZoneSample {
    public static void main(String[] args) throws ParseException {

        // I am in IST time Zone (Its ID is Asia/Calcutta or ITS)
        System.out.println(TimeZone.getDefault());
        // I get Indian Time printed
        System.out.println(new Date());
        System.out.println("-------------------");
        // I am setting the time zone to China
        TimeZone.setDefault(TimeZone.getTimeZone("CTT"));
        // Now my default time zone is in China
        System.out.println(TimeZone.getDefault());
        // I get Chian Time printed
        System.out.println(new Date());
        System.out.println("-------------------");
        // I am setting the time zone to EST
        TimeZone.setDefault(TimeZone.getTimeZone("EST"));
        // Now my default time zone is in EST
        System.out.println(TimeZone.getDefault());
        // I get Eastern Time printed
        System.out.println(new Date());

    }

}

控制台输出

sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
Wed Dec 26 10:22:25 IST 2012
-------------------
sun.util.calendar.ZoneInfo[id="CTT",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
Wed Dec 26 12:52:25 CST 2012
-------------------
sun.util.calendar.ZoneInfo[id="EST",offset=-18000000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Tue Dec 25 23:52:25 EST 2012

答案 3 :(得分:1)

TL;博士

myJavaUtilDate     // Avoid the troublesome legacy date-time classes. 
    .toInstant()   // Convert from legacy class to modern class `Instant`, always in UTC by definition.
    .atZone(       // Adjust into a time zone. Same moment, different wall-clock time.
        ZoneId.of( “America/New_York” )  // Never use “EST”/“IST” pseudo-zones. Use proper continent/region names. 
    )              // Yields a `ZonedDateTime` object. 

使用Instant,而不是Date

其他答案使用麻烦的旧遗留日期时间类。几年前, java.time 类取代了这些。忘记java.util.Date,这是一个设计糟糕的课堂。

  

如果我在IST中传递日期,

不要!

学习思考,工作,交换和登录UTC值。在作为程序员或管理员的工作中忘记自己的狭隘时区。将UTC视为 One True Time ,所有其他区域仅仅是变化。

java.time中的构建块是Instant类。此类表示一个时刻,即UTC时间轴上的一个点。内部表示自UTC 1970年以来的秒数加纳秒。

Instant instant = Instant.now() ;  // Capture current moment in UTC.

一般来说,这些Instant对象是您应该传递给代码的对象。仅在业务逻辑或用户界面需要时调整为时区。

切勿使用媒体中经常看到的3-4个字母伪区域,例如“IST”或“EST”。相反,请使用定义为continent/region的正确时区名称,例如Europe/ParisAsia/KolkataAmerica/New_York

ZoneId z = ZoneId.of( “America/New_York” ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

如果必须序列化为文本以交换日期时间值,请使用标准ISO 8601格式。默认情况下,这些方法在java.time toStringparse方法中使用。

要以其他格式生成字符串,请参阅DateTimeFormatter类。

要与尚未更新为 java.time 的旧代码互操作,请调用添加到旧类的新转换方法。

Date表示UTC时刻,因此它会直接映射到Instant

Instant instant = myJavaUtilDate.toInstant() ;

和...

java.util.Date myJavaUtilDate = java.util.Date.from( instant ) ;

旧版GregorianCalendar映射到现代ZonedDateTime

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 4 :(得分:0)

DateFormat requiredDateFormat = new SimpleDateFormat("hh:mm a zzz, EEE MMMM dd,yyyy");
requiredDateFormat.setTimeZone(TimeZone.getTimeZone("US/Eastern"));
String date = requiredDateFormat.format(new Date());
System.out.println(date);

控制台输出:美国东部时间上午06:25,即2月13日星期二,