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

Edm*_*jas 7 java datetime android

可能重复:
计算java中的日期/时间差异

如何将未来日期如2012年2月17日星期六转换为毫秒,然后可以从当前时间减去毫秒,以产生到将来的日期之前的剩余时间.

Phi*_*hil 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();
Run Code Online (Sandbox Code Playgroud)

一个更难的技术(基本上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();
Run Code Online (Sandbox Code Playgroud)

  • 这是我一直看到的糟糕编码实践的典型例子.此功能在非常简单和干净的界面中提供.滚动你自己是反生产力的.我沮丧,因为我真的觉得这是一个糟糕的答案,我甚至评论告诉你为什么(我不需要这样做).这是代码,尽管这是一个已关闭半年的死主题:DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy"); long millis = format.parse("Sat Feb 17 2012").getTime(); (3认同)
  • @dusktreader,如果你打算投票并提供新的建议,你至少应该提供代码.我的答案经过深思熟虑,并提供了大量的工作代码.这肯定不值得投票,你的评论也没有效果. (2认同)