如何仅从getCalendar()显示时间

时间:2016-02-12 00:12:42

标签: java android date datetime

我正在尝试将一个时区的偏移量添加到另一个时区,该时区存储在hourDifference中。它工作正常。但是,我想只输出HH:MM而不是如下所示的完整日期,并存储在新变量

  1. 之前:1月1日 16:55 :00 GMT + 00:00 1970
  2. 1月1日之后 17:55 :00 GMT + 00:00 1970年(很棒)
  3. 我想要的输出是什么: 17:55

    我的代码:

    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
    //Mailer is a simple string in the format 16:55 PM for example
    Date date = sdf.parse(mailer);
    sdf.getCalendar().add(Calendar.HOUR, (int) **hourDifference**);
    
    Log.d("Time with difference ", "LOG" + **sdf.getCalendar().getTime()**);
    

1 个答案:

答案 0 :(得分:0)

您还需要格式化输出:

sdf.format(date)

//按评论编辑,澄清

这是一个从开始到结束的工作示例:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
try {
  Date date = sdf.parse(mailer);
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(date);
  calendar.add(Calendar.HOUR, hourDifference);
  String formatted = sdf.format(calendar.getTime());
  System.out.println(formatted);
} catch(Exception e){
  System.out.println(e.getMessage());
}

所以让我们逐行打破这个。

在这里,您要创建一个具有将日期转换为人类可读字符串的功能的对象,反之亦然:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");

在这里,您要从字符串创建日期。您需要使用格式化程序来执行此操作,因为字符串将采用您在上面列出的“hh:mm”格式。如果您使用了不同的格式化程序,则很可能会误解字符串(邮件程序)表示的日期:

Date date = sdf.parse(mailer);

在这里,您将获得一个日历实例,它具有修改时刻的方法,与Date类不同

Calendar calendar = Calendar.getInstance();

现在将日历时间设置为mailer字符串中的日期:

calendar.setTime(date);

现在通过添加小时来修改日期:

calendar.add(Calendar.HOUR, hourDifference);

所以此时,datecalendar都只是代表某个时刻的类的实例。您通常获得的最接近的人类可读输出是自纪元以来的毫秒数。您需要再次格式化以使其可以按照您想要的方式读取,使用您最初创建的相同格式化程序实例,这次只在输出端。要做到这一点,您需要在谈论的那一刻提供格式化程序,现在最好用日历实例(添加了几个小时)来表示。不幸的是,虽然您可以将Date实例传递给format,但您无法传递Calendar实例,但您可以传递UTC时间来代表该时刻:

String formatted = sdf.format(calendar.getTime())

请注意上面的行返回一个字符串,您可以打印或记录或其他任何字符串,但它实际上并不会转换日历实例所代表的时刻。

HTH