调试与日历日期 GMT 相关的简单 java 代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Test {
public static void main(String[] args) throws ParseException {
Calendar dateFromNet = strToCal("11-MAR-2004", "dd-MMM-yyyy");
Calendar IEndTime = strToCal("20-05-2004", "dd-mm-yyyy");
if (dateFromNet.after(IEndTime) ) {
System.out.println(dateFromNet);
System.out.println(IEndTime);
System.out.println("not true: 11-MAR-2004(11-3-2004) > 20-05-2004 ");
}
}
private static Calendar strToCal(String date, String format) throws ParseException {
SimpleDateFormat input = new SimpleDateFormat(format);
input.setTimeZone(TimeZone.getTimeZone("GMT"));
Date d = (Date) input.parse(date);
Calendar c = Calendar.getInstance();
c.setTime(d);
return c;
}
}
该测试显示
dateFromNet.after(IEndTime) == true
ie 11-03-2004 是在 20-05-2004 之后
我做错了什么?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Test {
public static void main(String[] args) throws ParseException {
Calendar dateFromNet = strToCal("11-MAR-2004", "dd-MMM-yyyy");
Calendar IEndTime = strToCal("20-05-2004", "dd-mm-yyyy");
if (dateFromNet.after(IEndTime) ) {
System.out.println(dateFromNet);
System.out.println(IEndTime);
System.out.println("not true: 11-MAR-2004(11-3-2004) > 20-05-2004 ");
}
}
private static Calendar strToCal(String date, String format) throws ParseException {
SimpleDateFormat input = new SimpleDateFormat(format);
input.setTimeZone(TimeZone.getTimeZone("GMT"));
Date d = (Date) input.parse(date);
Calendar c = Calendar.getInstance();
c.setTime(d);
return c;
}
}
This test shows
dateFromNet.after(IEndTime) == true
i.e. 11-03-2004 is after 20-05-2004
What have I done wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
mm 代表毫秒;使这些国会大厦为 M,如下所示:
mm is for milliseconds; make those capitol M, like this:
字母
m
和M
具有不同的含义,如下表所示:因此,问题的根本原因是在模式
dd-mm-yyyy
中使用m
而不是M
。java.time
旧版日期时间 API(
java.util
日期时间类型及其格式化类型SimpleDateFormat
)已过时且存在错误 -易于。建议完全停止使用它并切换到java.time
,即现代日期时间 API*。现代 API 演示:
输出:
如果您确实需要来自
ZonedDateTime 对象的
,您可以按如下方式执行此操作:java.util.Calendar
对象了解有关 现代日期时间 API* 来自 跟踪:日期时间。
* 无论出于何种原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport 将大部分 java.time 功能向后移植到 Java 6 和 Java 6 7. 如果您正在处理 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 通过脱糖提供 Java 8+ API 和 如何在Android项目中使用ThreeTenABP。
The letter,
m
andM
have different meanings as shown in the following table:So, the root cause of the problem is using
m
instead ofM
in the pattern,dd-mm-yyyy
.java.time
The legacy date-time API (
java.util
date-time types and their formatting type,SimpleDateFormat
) is outdated and error-prone. It is recommended to stop using it completely and switch tojava.time
, the modern date-time API*.Demo of the modern API:
Output:
If at all you need an object of
java.util.Calendar
from this object ofZonedDateTime
, you can do so as follows:Learn more about the modern date-time API* from Trail: Date Time.
* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and How to use ThreeTenABP in Android Project.