在Java中以秒为单位获取日期表示

时间:2014-04-23 07:26:39

标签: java sybase sybase-ase

我有Eg: 2014-04-22 08:22:41的日期,我必须在格林威治标准时间5时区({1}}以秒为单位显示日期。

我有以下代码:

12/31/1969 19:00:00

输出为:第二个表示是1398135161

但是当我从Sybase数据库获得相同的值时,我得到了值:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class samp {

    public static void main(String args[]) {

        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-5:00"));
        long temp;
        Date tempDate = null;

        temp = 0L;
        cal.clear();
        try {
            tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-04-22 08:22:41");
        } catch (Exception e) {
        }
        cal.setTime(tempDate);
        temp = cal.getTimeInMillis() / 1000L;
        cal.clear();

        System.out.println("Second representation is " + (int) temp);

    }
}

为什么java结果和数据库值之间存在差异。

java代码中是否存在某些问题。

请澄清。

3 个答案:

答案 0 :(得分:0)

您可以在oracle文档站点找到: http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis()

getTimeInMillis以UTC返回时间

您可以使用以下方法将该值调整为您的时区:

cal.getTimeZone().getOffset(UTCmilliseconds)

其中(如http://docs.oracle.com/javase/6/docs/api/java/util/TimeZone.html#getOffset(long)所述)返回您需要添加到UTC时间的毫秒数,以便以毫秒为单位获取本地时间。

由您的区域调整时间给出:

cal.setTime(tempDate);
temp = cal.getTimeInMillis();
temp = (temp + (long)(cal.getTimeZone().getOffset(temp)))/ 1000L;

答案 1 :(得分:0)

他们正在使用不同的时区

您的数据库正在使用您设置的时区,但在您的日历中,当您获得毫秒时,您没有使用相同的时区。

1398135161 * 1000可以等于毫秒

Date (America/New_York) Monday, April 21, 2014 10:52:41 PM EDT
Date (GMT)  Tuesday, April 22, 2014 2:52:41 AM GMT

这都与时区有关。

有些网站可以帮助您解决疑问 http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/#.U1dtG-bqfCc http://www.fileformat.info/tip/java/date2millis.htm

答案 2 :(得分:0)

调整日期时间,而不是时代

您应该考虑调整日期时间值而不是时代。

使用时区,而不是偏移

由于夏令时和其他异常,您可能应该使用正确的时区名称,而不是特定的偏移号码。除非您绝对确定您的日期值总是按特定偏移量进行调整。

避免使用j.u.Date

你应该使用一个像样的库而不是众所周知的java.util.Date和.Calendar类。这意味着Joda-Time或Java 8中的新java.time包。

约达时间

以下是Joda-Time中的示例代码。

String inputRaw = "2014-01-02 12:34:56";
String input = inputRaw.replace( " ", "T" );
DateTimeZone timeZone = DateTimeZone.forID( "America/Detroit" );
DateTime dateTime = new DateTime( input, timeZone );
long millis = dateTime.getMillis();
Long seconds = ( millis / 1000L );