我正在尝试将String格式的日期与当前日期进行比较。这是我做的方式(没有测试,但应该工作),但我使用弃用的方法。对替代方案有什么好的建议吗?感谢。
P.S。我真的很讨厌用Java做Date的东西。有很多方法可以做同样的事情,你真的不确定哪一个是正确的,所以我的问题在这里。
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
答案 0 :(得分:171)
您的代码可以缩减为
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
或
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (System.currentTimeMillis() > strDate.getTime()) {
catalog_outdated = 1;
}
答案 1 :(得分:15)
您可以使用 compareTo()
如果当前对象较少,则CompareTo方法必须返回负数 如果当前对象大于,则为正数 如果两个对象彼此相等,则为其他对象和零。
// Get Current Date Time
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm aa");
String getCurrentDateTime = sdf.format(c.getTime());
String getMyTime="05/19/2016 09:45 PM ";
Log.d("getCurrentDateTime",getCurrentDateTime);
// getCurrentDateTime: 05/23/2016 18:49 PM
if (getCurrentDateTime.compareTo(getMyTime) < 0)
{
}
else
{
Log.d("Return","getMyTime older than getCurrentDateTime ");
}
答案 2 :(得分:9)
您可以直接从Calendar
Date
Calendar validDate = new GregorianCalendar();
validDate.setTime(strDate);
if (Calendar.getInstance().after(validDate)) {
catalog_outdated = 1;
}
答案 3 :(得分:9)
请注意,在代码工作之前,正确的格式是(“dd / MM / yyyy”)。 “mm”意味着小吃!
String valid_until = "01/07/2013";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = null;
try {
strDate = sdf.parse(valid_until);
} catch (ParseException e) {
e.printStackTrace();
}
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
答案 4 :(得分:5)
String date = "03/26/2012 11:00:00";
String dateafter = "03/26/2012 11:59:00";
SimpleDateFormat dateFormat = new SimpleDateFormat(
"MM/dd/yyyy hh:mm:ss");
Date convertedDate = new Date();
Date convertedDate2 = new Date();
try {
convertedDate = dateFormat.parse(date);
convertedDate2 = dateFormat.parse(dateafter);
if (convertedDate2.after(convertedDate)) {
txtView.setText("true");
} else {
txtView.setText("false");
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
它返回true .. 你也可以在date.before和date.equal ..
的帮助之前检查并等于答案 5 :(得分:4)
Calendar toDayCalendar = Calendar.getInstance();
Date date1 = toDayCalendar.getTime();
Calendar tomorrowCalendar = Calendar.getInstance();
tomorrowCalendar.add(Calendar.DAY_OF_MONTH,1);
Date date2 = tomorrowCalendar.getTime();
// date1 is a present date and date2 is tomorrow date
if ( date1.compareTo(date2) < 0 ) {
// 0 comes when two date are same,
// 1 comes when date1 is higher then date2
// -1 comes when date1 is lower then date2
}
答案 6 :(得分:2)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
Date date1 = dateFormat.parse("2013-01-01");
Date date2 = dateFormat.parse("2013-01-02");
calendar1.setTime(date1);
calendar2.setTime(date2);
System.out.println("Compare Result : " + calendar2.compareTo(calendar1));
System.out.println("Compare Result : " + calendar1.compareTo(calendar2));
将此日历表示的时间与给定日历表示的时间进行比较。
返回 如果两个日历的时间相等,则为0;如果此日历的时间在另一个日历之前,则为-1;如果此日历的时间在另一个日历之后,则为1。
答案 7 :(得分:2)
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String str1 = "9/10/2015";
Date date1 = formatter.parse(str1);
String str2 = "10/10/2015";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2) < 0) {
System.out.println("date2 is Greater than my date1");
}
} catch (ParseException e1) {
e1.printStackTrace();
}
答案 8 :(得分:1)
将日期转换为日历并在那里进行计算。 :)
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.geT(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH); //same as cal.get(Calendar.DATE)
或者:
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
if (strDate.after(new Date()) {
catalog_outdated = 1;
}
答案 9 :(得分:1)
你可以试试这个
Calendar today = Calendar.getInstance ();
today.add(Calendar.DAY_OF_YEAR, 0);
today.set(Calendar.HOUR_OF_DAY, hrs);
today.set(Calendar.MINUTE, mins );
today.set(Calendar.SECOND, 0);
您可以使用today.getTime()
来检索值并进行比较。
答案 10 :(得分:1)
有时候我们需要做一个包含日期的列表,比如
今天有小时
昨天和昨天一起
2017年6月23日的其他日子
为此,我们需要将当前时间与我们的数据进行比较。
Public class DateUtil {
Public static int getDateDayOfMonth (Date date) {
Calendar calendar = Calendar.getInstance ();
Calendar.setTime (date);
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static int getCurrentDayOfMonth () {
Calendar calendar = Calendar.getInstance ();
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static String convertMillisSecondsToHourString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("HH: mm");
Return formatter.format (date);
}
Public static String convertMillisSecondsToDateString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("dd / MM / yyyy");
Return formatter.format (date);
}
Public static long convertToMillisSecond (Date date) {
Return date.getTime ();
}
Public static String compare (String stringData, String yesterday) {
String result = "";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd HH: mm: ss");
Date date = null;
Try {
Date = simpleDateFormat.parse (stringData);
} Catch (ParseException e) {
E.printStackTrace ();
}
Long millisSecond = convertToMillisSecond (date);
Long currencyMillisSecond = System.currentTimeMillis ();
If (currencyMillisSecond> millisSecond) {
Long diff = currencyMillisSecond - millisSecond;
Long day = 86400000L;
If (diff <day && getCurrentDayOfMonth () == getDateDayOfMonth (date)) {
Result = convertMillisSecondsToHourString (millisSecond);
} Else if (diff <(day * 2) && getCurrentDayOfMonth () -1 == getDateDayOfMonth (date)) {
Result = yesterday;
} Else {
Result = convertMillisSecondsToDateString (millisSecond);
}
}
Return result;
}
}
答案 11 :(得分:1)
时间到了现代答案。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
我刚才运行此代码时,输出为:
目录已过时
由于在所有时区中都不会是同一日期,因此请为LocalDate.now
指定明确的时区。如果您希望目录在所有时区中同时到期,则可以给ZoneOffset.UTC
,只要您告知用户您正在使用UTC。
我正在使用java.time(现代Java日期和时间API)。您使用的日期时间类Calendar
,SimpleDateFormat
和Date
设计得很差,很幸运,它已经过时了。此外,尽管名称Date
并不代表日期,但代表时间点。其结果是:即使今天是2019年2月15日,一个新创建的Date
对象已经在之后(因此不等于)通过解析{ {1}}。这使一些人困惑。与此相反,现代Date
是一个没有一天中的时间(也没有时区)的日期,因此代表今天的日期的两个15/02/2019
总是相等的。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
LocalDate
导入日期和时间类。LocalDate
。org.threeten.bp
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 12 :(得分:0)
您可以使用 validDate.setTime(strDate) 看看http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
上的javadoc答案 13 :(得分:0)
java.util.Date和.Calendar类非常麻烦。避免他们。在Java 8中使用Joda-Time或新的java.time包。
如果您想要仅限日期而没有时间,请使用LocalDate类。
获取当前日期取决于时区。在蒙特利尔之前,巴黎有一个新的日期。指定所需的时区,而不是取决于JVM的默认值。
Joda-Time 2.3中的示例。
DateTimeFormat formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( "1/1/1990" );
boolean outdated = LocalDate.now( DateTimeZone.UTC ).isAfter( localDate );
答案 14 :(得分:0)
# Set slide variable equal to the second slide
slide = prs.slides[1]
# Reference shape via IDX value
chart = slide.shapes[1].chart
# Set chart_data variable
chart_data = CategoryChartData()
答案 15 :(得分:0)
Kotlin支持运算符重载
在Kotlin中,您可以轻松地与比较运算符比较日期。因为Kotlin已经支持运算符重载。 所以要比较日期对象:
firstDate: Date = // your first date
secondDate: Date = // your second date
if(firstDate < secondDate){
// fist date is before second date
}
,如果您使用的是日历对象,则可以轻松进行如下比较:
if(cal1.time < cal2.time){
// cal1 date is before cal2 date
}