在Java中将日期字符串转换为毫秒数

7

可能是重复问题:
如何在Java中计算日期/时间差异

如何将未来日期(例如Sat Feb 17 2012)转换为Java中的毫秒数,以便从当前毫秒数中减去并得出到该未来日期的剩余时间。


1
使用具有日期时间意识的库(例如Joda Time)通常比转换为毫秒,然后再转换回来更好:毫秒可能会在时区差异、30天以外的某些月份、闰年等方面丢失信息。因此,这取决于所需的精度水平... - user166390
6个回答

21

最简单的技术是使用 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();

或者,您可以使用SimpleDateFormat在2行代码中完成它。 - dusktreader
2
@dusktreader,如果你打算给出一个新的建议并且down vote,那么你至少应该提供一些代码。我的答案经过深思熟虑并提供了大量可行的代码。这绝对不应该被 down vote,你的评论也没有任何建设性。 - Phil
3
这是我经常看到的糟糕编码实践的典型例子。这个功能在一个非常简单和清晰的界面中提供。自己重新开发会反而不利于生产。我进行了负评,因为我认为这是一个糟糕的答案,我甚至评论告诉你为什么(其实我不需要这样做)。这里是代码,尽管这个主题已经关闭了半年: DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy"); long millis = format.parse("Sat Feb 17 2012").getTime(); - dusktreader

4
首先,您需要解析字符串以获取其日期表示形式。 这里 有一些示例和文档。 然后,您应该调用您的日期的 getTime() 方法。

链接已失效。 - Codeversed

4
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;

2

将未来日期的年、月和日传递到此代码的日期中,变量 diff 将提供到该日期的毫秒时间。

    Date date = new GregorianCalendar(year, month, day).getTime();
    Date today = new Date();
    long diff = date.getTime() - today.getTime();

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接