2011-01-12 107 views
4

這主要適用於android,但可以在Java中使用。我有這些聽衆:在Java中將整數日期/時間轉換爲unix時間戳?

int year, month, day, hour, minute; 
// the callback received when the user "sets" the date in the dialog 
private DatePickerDialog.OnDateSetListener mDateSetListener = 
     new DatePickerDialog.OnDateSetListener() { 

      public void onDateSet(DatePicker view, int year, 
            int monthOfYear, int dayOfMonth) { 
       year = year; 
       month = monthOfYear; 
       day = dayOfMonth; 
      } 
     }; 
// the callback received when the user "sets" the time in the dialog 
private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
    new TimePickerDialog.OnTimeSetListener() { 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      hour = hourOfDay; 
      minute = minute; 
     } 
    }; 

我怎麼能轉換int year, month, day, hour, minute;爲unix時間戳?這可能沒有Date類?

+1

你爲什麼不想要使用日期類? – Falmarri 2011-01-12 21:22:57

+0

爲了避免創建Date對象,如下所述:http://stackoverflow.com/questions/732034/getting-unixtime-in-java – 2011-01-12 21:29:12

回答

18

好,使用日曆的話,因爲這是最好日期反正:

int componentTimeToTimestamp(int year, int month, int day, int hour, int minute) { 

    Calendar c = Calendar.getInstance(); 
    c.set(Calendar.YEAR, year); 
    c.set(Calendar.MONTH, month); 
    c.set(Calendar.DAY_OF_MONTH, day); 
    c.set(Calendar.HOUR, hour); 
    c.set(Calendar.MINUTE, minute); 
    c.set(Calendar.SECOND, 0); 
    c.set(Calendar.MILLISECOND, 0); 

    return (int) (c.getTimeInMillis()/1000L); 
} 

日曆不會做任何的計算,直到getTimeMillis()被調用,被設計成比Date更有效。

1

我假設你想避免對象開銷,所以我不建議任何日期或日曆類;相反,您可以直接計算該值。

Unix時間或POSIX時間是一個描述時間點的系統,定義爲從1970年1月1日午夜協調世界時(UTC)開始經過的秒數,不包括閏秒。 (Wikipedia article

從1970年1月1日計算天數,所選擇的年/月/日,乘上24 * 3600,再加入hour * 3600 + minute * 60得到的秒數從1970-01-01 00:00到選定的日期和時間。

有衆所周知的algorithms計算日期之間的日子。

0

因爲我想解釋夏令以及與當地時區一起,因此搜索小時所有可能的解決方案之後,什麼工作對我來說是如下:

int gmtOffset = TimeZone.getDefault().getRawOffset(); 
     int dstOffset = TimeZone.getDefault().getDSTSavings(); 
     long unix_timestamp = (System.currentTimeMillis() + gmtOffset + dstOffset)/1000; 
相關問題