我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我有一系列有开始日期和结束日期的范围.我想检查日期是否在该范围内.
Date.before()和Date.after()似乎有点尴尬.我真正需要的是像这样的伪代码:
boolean isWithinRange(Date testDate) {
return testDate >= startDate && testDate <= endDate;
}
Run Code Online (Sandbox Code Playgroud)
不确定它是否相关,但我从数据库中提取的日期有时间戳.
我正在开发一个Java应用程序,它生成一个用户在命令行中输入的持续时间的报告.用户需要按以下格式输入日期:dd-MM-yyyy
> java report startDate endDate
例:
java report 01-01-2013 31-03-2013
在代码中,我将日期保存在两个字符串中.我必须确保用户输入的开始日期应该早于结束日期.是否有内置函数可以通过将这两个字符串传递给它来帮助我实现这一目的?
我有两个约会:
toDate
(用户输入MM/dd/yyyy
格式)currentDate
(获得new Date()
)我需要比较currentDate
用toDate
.我只有在toDate
等于或大于时才显示报告currentDate
.我怎样才能做到这一点?
我需要比较java中的两个日期.我正在使用这样的代码:
Date questionDate = question.getStartDate();
Date today = new Date();
if(today.equals(questionDate)){
System.out.println("Both are equals");
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.变量的内容如下:
questionDate
包含 2010-06-30 00:31:40.0
today
包含 Wed Jun 30 01:41:25 IST 2010
我该如何解决这个问题?
我得到两个日期作为字符串值,我想检查开始时间早于结束时间.我比较它们,因为它没有将它们转换为使用日期SimpleDateFormat
,如下所示:
String startTime = "2013-01-02 14:25:56";
String endTime = "2013-01-02 14:30:56";
if(endTime.compareTo(startTime) > 0){
System.out.println("End time is greater than start time");
}
Run Code Online (Sandbox Code Playgroud)
是否真的有必要将它们转换为日期并进行比较?我会错过什么吗?我做对了吗?
我有两个Date
具有以下格式的对象.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String matchDateTime = sdf.parse("2014-01-16T10:25:00");
Date matchDateTime = null;
try {
matchDateTime = sdf.parse(newMatchDateTimeString);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// get the current date
Date currenthDateTime = null;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date dt = new Date();
String currentDateTimeString = dateFormat.format(dt);
Log.v("CCCCCurrent DDDate String is:", "" + currentDateTimeString);
try {
currenthDateTime = sdf.parse(currentDateTimeString);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} …
Run Code Online (Sandbox Code Playgroud) 我有一个"mm/yyyy"形式的字符串,我想将它与本地系统的日期进行比较.
我想过要在我的月份和日历中的MONTH字段之间使用转换表,例如:
Calendar cal = Calendar.getInstance();
String date = "07/2014";
String month = date.subString(0, 2);
int monthToCompare;
if (month.equals("01"))
monthToCompare = cal.JANUARY;
if (month.equals("02"))
monthToCompare = cal.FEBRUARY;
...
Run Code Online (Sandbox Code Playgroud)
然后手动比较if.我不喜欢它,因为我觉得这么简单的操作太长了.
我想到的另一个选择是获取当前Date()
和使用该 before()
方法.这意味着将我的日期转换为日期格式,但是不推荐使用简单的方法,我必须指定毫秒数,我不知道如何轻松地做到这一点(考虑到闰年,日历更正等等)自1970年以来).
所以我使用的dateString1.compareTo(dateString2)
是根据每个字符的Unicode值对字符串进行字典比较,并返回一个int.这是一个代码示例.
String dateString1 = "05-12-2012";
String dateString2 = "05-13-2012";
if (dateString1.compareTo(dateString2) <=0){
System.out.println("dateString1 is an earlier date than dateString2");
}
Run Code Online (Sandbox Code Playgroud)
这是比较Java中日期的错误方法吗?
在我的测试中,我没有遇到过我意外结果的情况.我真的不想从字符串中创建一个Date对象,如果我不需要,因为我在一个长时间运行的循环中这样做.
忍者编辑
从下面的答案中收集如果将日期作为字符串进行比较,如果它是yyyyMMdd
格式的,但是如果它是任何其他格式,则显然会导致错误.
我实际上yyyyMMdd
在实际代码中将日期字符串作为格式.(我在上面给出的示例中输入了错误的格式.)所以现在,我将保留代码,并添加几行注释以证明我的决定.
但我现在看到比较像这样的字符串是非常有限的,如果dba决定改变日期格式,我将遇到错误,我不认为发生了.