Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个日期字符串转换为长字符串_Java_Date_Datetime_Simpledateformat - Fatal编程技术网

Java 将多个日期字符串转换为长字符串

Java 将多个日期字符串转换为长字符串,java,date,datetime,simpledateformat,Java,Date,Datetime,Simpledateformat,我有两条弦:“孙军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(); 当我将长

我有两条弦:“孙军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)

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

String completeTime = s1 + " " + s2;
SimpleDateFormat sdf = new SimpleDateFormat ("EEE MMM dd HH:mm")
Date date = sdf.parse(completeTime)
long millis = date.getTime()
编辑.. 我之前读过整个问题对不起

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


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

我有点进一步,但有一个不同的问题:

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”)


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

我认为由于时区设置,两个对象之间的小时会发生变化。是的,这就是时区。谢谢你的提示。我现在使用日历获取当前年份,并连接所有3个字符串。但是我仍然有一个问题(见我的答案)。在你的SimpleDateFormat中使用小写的y,f'y'是周年,其中y'是年,更多信息请参阅帖子。