public static final String inputFormat = "HH:mm";
private Date date;
private Date dateCompareOne;
private Date dateCompareTwo;
LINE 5:
private String compareStringOne = String.valueOf(SetTimeActivity.intFromTimeH)+ ":"+ String.valueOf(SetTimeActivity.intFromTimeM) ;
LINE 6:
private String compareStringTwo = String.valueOf(SetTimeActivity.intToTimeH) + ":"+ String.valueOf(SetTimeActivity.intToTimeM);
SimpleDateFormat inputParser = new SimpleDateFormat(inputFormat, Locale.US);
private void compareDates()
{
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
date = parseDate(hour + ":" + minute);
dateCompareOne = parseDate(compareStringOne);
dateCompareTwo = parseDate(compareStringTwo);
if (!(dateCompareOne.before( date ) && dateCompareTwo.after(date))) {
....
我正在尝试检查当前时间是否在指定时间之间。为此我首先将指定的时间转换为字符串(在Line5和Line6中)。即使我得到正确的整数值,形成的字符串也总是显示“0:0”。 此外,年份显示为1970年(日期和显示的日期也是错误的)。 我需要得到当前时间。我做错了什么?
private Date parseDate(String date) {
try {
return inputParser.parse(date);
} catch (java.text.ParseException e) {
return new Date(0);
}
}
答案 0 :(得分:1)
parseDate()函数返回自1970年1月1日以来经过的时间。这被称为Unix Epoch,它是Unix计算机中所有时间的表示方式。通过在仅包含小时和分钟的字符串上运行parseDate函数,您将创建一个Date对象,该对象表示1970年1月1日之后的时间HH:mm。
您的代码使用了一种非常奇怪的方式来获取当前时间。将Calendar转换为两个int,然后转换为一个字符串,最后解析回Date将会效率低下,并且可以解决各种不必要的错误。
初始化新的Date对象时,会自动为其分配初始化时间。因此:
Date d = new Date();
会导致d成为初始化的时刻(即今年,月,日,小时,分钟,秒和微秒)。然后你可以使用Date.after()和Date.before()。
如果您仍想通过日历方法进行操作,那么您可以通过以下方式获得更好的服务:
cal = Calendar.getInstance();
Date d = cal.getTime();
可能你有其他问题,但值得先做好。当您通过将数据写为字符串来传递数据时(特别是当它与时间相关时,对于“12”实际表示的内容存在各种歧义),您将失去语言输入为您提供的所有优势。
答案 1 :(得分:1)
此代码可以帮助您
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE); if (c.get(Calendar.AM_PM) == Calendar.AM)
am_pm = "AM";
else if (c.get(Calendar.AM_PM) == Calendar.PM)
am_pm = "PM";
// Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
String formattedDate = df.format(c.getTime());
Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();
答案 2 :(得分:0)
如果您已使用Date
个对象,为什么不使用Date.after(...)
和Date.before(...)
方法。