Java 如何仅从getCalendar()显示时间

Java 如何仅从getCalendar()显示时间,java,android,date,datetime,Java,Android,Date,Datetime,我试图将一个时区的偏移量添加到另一个时区,它存储在hourDifference中。它很好用。但是,我只想输出HH:MM,而不是如下所示的完整日期,并存储在新变量中 之前:1月1日星期四16:55:00 GMT+00:00 1970 1月1日星期四17:55后格林尼治标准时间00:00+1970年00:00(很好,它能工作) 我想要什么输出:17:55 我的代码: SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a"); //Mailer is

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

  • 之前:1月1日星期四16:55:00 GMT+00:00 1970
  • 1月1日星期四17:55后格林尼治标准时间00:00+1970年00:00(很好,它能工作)
  • 我想要什么输出: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()**);
    

    您还需要格式化输出:

    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”格式。如果使用了不同的格式化程序,则很可能会误解字符串(mailer)所表示的日期:

    Date date = sdf.parse(mailer);
    
    在这里,您将获得一个calendar实例,与Date类不同,它具有修改时刻的方法

    Calendar calendar = Calendar.getInstance();
    
    现在,将日历时间设置为您从
    邮件收发程序
    字符串中获得的日期:

    calendar.setTime(date);
    
    现在通过添加小时来修改日期:

    calendar.add(Calendar.HOUR, hourDifference);
    
    因此,在这一点上,
    date
    calendar
    都只是表示某个时刻的类的实例。正常情况下,最接近人类可读的输出是自历元以来的毫秒数。您需要使用最初创建的同一个格式化程序实例(这次就在输出端),再次格式化它,以使其以您想要的方式可读。要做到这一点,您需要在谈论的时候提供格式化程序,现在最好由calendar实例(其中添加了小时)来表示。不幸的是,虽然可以将
    日期
    实例传递到
    格式
    ,但不能传递
    日历
    实例,但可以传递UTC时间来表示时刻:

    String formatted = sdf.format(calendar.getTime())
    
    请注意,上面的行返回一个字符串,您可以打印或记录该字符串或其他内容,但它实际上并不转换日历实例所表示的时刻


    HTH

    当我使用sdf.getCalendar().getTime()时,得到了相同的结果,这让我很累,当我使用sdf.format(date)时,应用了hourDifference,我只得到原始时间。我需要添加时间,然后输出时间。非常感谢,您必须将时差添加到正在格式化的实例中检查编辑,应该非常清楚地解释事情