0

我有 2 个字符串:“Sun Jun 23”和“22:45”。我想得到这两个字符串加上实际年份所指示的日期的长(毫秒?)表示。

我正在尝试这样的事情:

String s1 = "Sun Jun 23";
String s2 = "22:45";
long date = new SimpleDateFormat("EEE MMM dd").parse(s1).getTime() 
          + new SimpleDateFormat("HH:mm").parse(s2).getTime();

当我将长日期格式转换回字符串时

private SimpleDateFormat sdf;
sdf = new SimpleDateFormat("yyyy.MM.dd_HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
console.getOut().println(sdf.format(date));

我得到“1970.06.23_20:45:00”

这表明两个问题:

  • 这不包含当前年份。我怎样才能添加它?
  • 为什么我“失去”了 2 个小时(从 22:45 到 20:45)
4

2 回答 2

2

尝试连接字符串然后解析日期并获取时间

String completeTime = s1 + " " + s2;
SimpleDateFormat sdf = new SimpleDateFormat ("EEE MMM dd HH:mm")
Date date = sdf.parse(completeTime)
long millis = date.getTime()

编辑.. 在抱歉之前完全阅读了整个问题......

您的日期不会在任何地方读取年份,因此您必须添加它或从某个地方读取它,如果是年份,我建议使用 Calendar 对象来获取它

从您的毫秒长解析中的时区信息似乎导致了时差,您可以尝试使用"GMT+2"来纠正这个问题,但这可能并不总是正确的。如果你去掉时区的设置,它会改变你的结果吗?

于 2013-06-23T21:17:46.657 回答
0

我走得更远了,但遇到了一个不同的问题:

String s1 = "Sun Jun 23";
String s2 = "22:45";
SimpleDateFormat f = new SimpleDateFormat("YYYY EEE MMM dd HH:mm");
f.setTimeZone(TimeZone.getTimeZone("GMT")); //thanks for the timezone hints!
Date d;
long date;
int year;
try {
    year = Calendar.getInstance().get(Calendar.YEAR);
    String fullDate = year + " " + s1 + " " + s2;
    d = f.parse(fullDate);
    date = d.getTime();
    SimpleDateFormat sdf2;
    sdf2 = new SimpleDateFormat("yyyy.MM.dd_HH:mm:ss");
    sdf2.setTimeZone(TimeZone.getTimeZone("GMT"));
    console.getOut().println(sdf2.format(date));
} catch (ParseException e) {
    e.printStackTrace();
} 

打印出来:2012.12.30_22:45:00。

时区现在看起来不错(我看到 22:45),

fullDate 包含正确的字符串(“2013 Sun Jun 23 22:45”)。

为什么我没有得到正确的日期?

于 2013-06-23T21:58:24.890 回答