无法获取当前时间,日期显示为1970年

时间:2013-11-18 12:43:36

标签: android datetime time

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);
    }
}

3 个答案:

答案 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(...)方法。