将日期转换为MilliSeconds时遇到问题

时间:2010-11-26 14:19:24

标签: java android

在我的 Android应用程序中,我正在尝试将日期/时间转换为毫秒,请检查以下代码:

public long Date_to_MilliSeconds(int day, int month, int year, int hour, int minute)
{

       Calendar c = Calendar.getInstance();
       c.setTimeZone(TimeZone.getTimeZone("UTC"));
       c.set(year, month, day, hour, minute, 00);

        return c.getTimeInMillis();

}

问题:我将于2010年11月22日19:49:00(即5小时后)收到1290455340800(11月22日14:49:00美国东部时间2010)

FYI, I am Currently in Indian TimeZone, but application can be executed from any country. so How do i exact Convert the date/time into the Milliseconds?

5 个答案:

答案 0 :(得分:1)

我的猜测是你正在呼叫Date_to_MilliSeconds(22, 10, 2010, 19, 49)。您的代码明确使用UTC,因此它会将您传递给它的任何内容视为UTC。

就像你的previous question(这让我试图将其作为副本关闭),目前还不清楚你真正想要做什么。

如果要为方法提供本地时间,则需要指定本地时区。如果您需要在用户的时区中使用本地时间,请尝试将时区设置为TimeZone.getDefault() - 尽管我希望它仍然是默认值。如果要为方法提供UTC时间,则需要指定UTC时区(就像在这里一样)。

真正尝试做什么?

答案 1 :(得分:1)

在这段代码中,您将获得自UTC时区11月22日19:49:00开始的时区01/01/1970 00:00以来的毫秒数。为什么要将时区设置为UTC?

答案 2 :(得分:1)

5小时的差异是UTC和EST之间的差异。如果输入日期是字符串,则可以使用DateFormat.parse()来解析输入日期。或者您可以使用上面的代码并在c.setTimeZone()中传递所需的时区 - 放入EST而不是UTC。

答案 3 :(得分:1)

这一行

c.setTimeZone(TimeZone.getTimeZone("UTC"));

可能导致问题。无需将TimeZone设置为使用当前默认值。

答案 4 :(得分:0)

我正在使用它:

public String timeToString(long time, String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
    sdf.setTimeZone(TimeZone.getDefault());
    return sdf.format(time + TimeZone.getDefault().getRawOffset()
            + TimeZone.getDefault().getDSTSavings());
}

我认为它解决了TimeZone的问题。