我的代码有什么问题我无法从我想要解析的日期时间得到确切的输出?
String convertDate="03/19/2014 5:30:10 PM";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.CANADA);
Date myDate=new Date();
try {
myDate=df.parse(convertDate);
final Calendar c = Calendar.getInstance();
c.setTime(myDate);
System.out.println("Year = " + c.get(Calendar.YEAR));
System.out.println("Month = " + (c.get(Calendar.MONTH)));
System.out.println("Day = " + c.get(Calendar.DAY_OF_MONTH));
} catch (ParseException e1) {
e1.printStackTrace();
}
我的输出是
- 04-28 03:07:15.322: I/System.out(25095): Year = 2015
- 04-28 03:07:15.322: I/System.out(25095): Month = 6
- 04-28 03:07:15.322: I/System.out(25095): Day = 3
一定是
- Year = 2014
- Month = 03
- Day = 19
答案 0 :(得分:2)
从此
更改日期格式dd/MM/yyyy HH:mm:ss
到这个
MM/dd/yyyy HH:mm:ss
月份基于Zero (0)
索引。因此,在检索月份索引后,您必须添加1
才能获得当前月份。
因此,请尝试按以下方式打印当月......
int currentMonth = c.get(Calendar.MONTH) + 1;
System.out.println("Month = " + currentMonth);
或者
System.out.println("Month = " + (c.get(Calendar.MONTH)+1));
答案 1 :(得分:1)
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.CANADA);
现在尝试......它会起作用。
有了这个,你必须在你的月份加1。代码在这里:
String convertDate="03/19/2014 5:30:10 PM";
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.CANADA);
Date myDate=new Date();
try {
myDate=df.parse(convertDate);
final Calendar c = Calendar.getInstance();
c.setTime(myDate);
int y,m,d;
y=Calendar.YEAR;
System.out.println("Year = " + c.get(Calendar.YEAR));
//Log.d("Year", y);
System.out.println("Month = " + (c.get(Calendar.MONTH)+1));
System.out.println("Day = " + c.get(Calendar.DATE));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
答案 2 :(得分:1)
不幸的是,the accepted answer 和 the other answer 都是错误的。
您在解析中犯了两个错误:
MM
换成 dd
。H
而不是 h
来解析带有 AM/PM 标记的日期时间字符串。符号 H
用于解析 24 小时格式的时间字符串。另一个需要考虑的重点是 PM 在 p.m.
中写为 Locale.CANADA
。对于您的时间字符串,您可以使用 Locale.US
将其指定为 PM。因此,您可以使用如下所示的解析器:
new SimpleDateFormat("M/d/u h:m:s a", Locale.US)
其中 a
已用于解析 AM/PM。
使用此解析器将解决您的问题,但旧的日期时间 API(java.util
日期时间类型及其格式 API,SimpleDateFormat
)已过时且容易出错。建议完全停止使用,改用java.time
,modern date-time API*。
使用现代日期时间 API 的演示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
String convertDate = "03/19/2014 5:30:10 PM";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("M/d/u h:m:s a", Locale.US);
LocalDateTime ldt = LocalDateTime.parse(convertDate, dtfInput);
System.out.printf("Year: %d, Month: %d, Day: %d%n", ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth());
// Or, using DateTimeFormatter
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("'Year:' uuuu, 'Month:' M, 'Day:' d", Locale.US);
System.out.println(ldt.format(dtfOutput));
}
}
输出:
Year: 2014, Month: 3, Day: 19
Year: 2014, Month: 3, Day: 19
从 modern date-time API 中了解有关 Trail: Date Time* 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。