2011-12-08 110 views
5

可能重複:
Calculate date/time difference in java將日期字符串轉換成毫秒的java

如何將一個將來的日期,如星期六2012年2月17日在java中被轉換成毫秒然後可以從當前時間中減去毫秒以產生直到該未來日期的剩餘時間。

+1

使用日期時間感知庫通常更好(例如, [Joda Time]](http://joda-time.sourceforge.net/0)比轉換爲毫秒然後轉換回來:毫秒可能會丟失信息,如時區差異,無30天的月份,閏年等。因此,根據所需的準確度水平... – 2011-12-08 06:52:53

回答

19

最簡單的方法是使用DateFormat

String input = "Sat Feb 17 2012"; 
Date date = new SimpleDateFormat("EEE MMM dd yyyy", Locale.ENGLISH).parse(input); 
long milliseconds = date.getTime(); 
long millisecondsFromNow = milliseconds - (new Date()).getTime(); 
Toast.makeText(this, "Milliseconds to future date="+millisecondsFromNow, Toast.LENGTH_SHORT).show(); 

更困難的技術(即基本上沒有什麼DateFormat爲你做)涉及自己進行解析(這將不是被認爲是最佳實踐):

String input = "Sat Feb 17 2012"; 
String[] myDate = input.split("\\s+"); 
int year = Integer.parseInt(myDate[3]); 
String monthString = myDate[1]; 
int mo = monthString.equals("Jan")? Calendar.JANUARY : 
      monthString.equals("Feb")? Calendar.FEBRUARY : 
      monthString.equals("Mar")? Calendar.MARCH : 
      monthString.equals("Apr")? Calendar.APRIL : 
      monthString.equals("May")? Calendar.MAY : 
      monthString.equals("Jun")? Calendar.JUNE : 
      monthString.equals("Jul")? Calendar.JULY : 
      monthString.equals("Aug")? Calendar.AUGUST : 
      monthString.equals("Sep")? Calendar.SEPTEMBER : 
      monthString.equals("Oct")? Calendar.OCTOBER : 
      monthString.equals("Nov")? Calendar.NOVEMBER : 
      monthString.equals("Dec")? Calendar.DECEMBER : 0; 
int day = Integer.parseInt(myDate[2]); 
Calendar c = Calendar.getInstance(); 
c.set(year, mo, day); 
long then = c.getTimeInMillis(); 
Time current_time = new Time(); 
current_time.setToNow(); 
long now = current_time.toMillis(false); 
long future = then - now; 
Date d = new Date(future); 
//TODO use d as you need. 
Toast.makeText(this, "Milliseconds to future date="+future, Toast.LENGTH_SHORT).show(); 
+0

或者,您可以使用SimpleDateFormat在兩行代碼中執行此操作。 – dusktreader

+2

@dusktreader,如果你打算投票並提供一個新的建議,你至少應該提供代碼。我的回答非常深思熟慮並提供了很多工作代碼。這當然不值得投票,而你的評論沒有成效。 – Phil

+3

這是我經常看到的糟糕編碼習慣的典型例子。這個功能提供了一個非常簡單和乾淨的界面。滾動你自己的是反生產。我低估了,因爲我真的覺得這是一個不好的答案,我甚至評論說要告訴你爲什麼(我不需要這樣做)。這裏是代碼,儘管這是一個已經關閉了半年的死老鼠: DateFormat format = new SimpleDateFormat(「EEE MMM dd yyyy」); long millis = format.parse(「Sat Feb 17 2012」)。getTime(); – dusktreader

4

Firts,你必須解析你的字符串才能得到它的日期表示。 Here是示例和一些文檔。 然後你應該打電話給你的日期的getTime()方法。

+0

鏈接不起作用了。 – Codeversed

2

通行證年,月,在這段代碼和變量DIFF日期會給毫秒的時間,直到該日期以後日期的當天,

Date date = new GregorianCalendar(year, month, day).getTime(); 
    Date today = new Date(); 
    long diff = date.getTime() - today.getTime(); 
3
DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US); 
long futureTime = 0; 
try { 
    Date date = format.parse("Sat Feb 17 2012"); 
    futureTime = date.getTime(); 
} catch (ParseException e) { 
    Log.e("log", e.getMessage(), e); 
} 

long curTime = System.currentTimeMillis(); 
long diff = futureTime - curTime; 
1

您可以直接調用的getTime()日期對象的方法。請通過樣品按照以下

import java.util.Date; 

public class Test { 
    @SuppressWarnings("deprecation") 
    public static void main(String[] args) { 

     System.out.println(new Date("Sat Feb 17 2012").getTime()); 

    } 

} 
1
try { String str_date="11-June-07"; 
    SimpleDateFormat formatter ; 
    Date date ; 
    formatter = new SimpleDateFormat("dd-MMM-yy"); 
    date = (Date) formatter.parse(str_date); 
    Log.i("test",""+date); 
    } catch (Exception e) 
    {System.out.println("Exception :"+e); } 

    Date d = new Date(); 
    long time = d.getTime(); 
    long timeDiff = time - lastTime; 

//timeDiff will contain your value. 
//import these two, 
//import java.text.SimpleDateFormat; 
//import java.util.Date; 
相關問題