Java 如何仅从getCalendar()显示时间
我试图将一个时区的偏移量添加到另一个时区,它存储在hourDifference中。它很好用。但是,我只想输出HH:MM,而不是如下所示的完整日期,并存储在新变量中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
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,我只得到原始时间。我需要添加时间,然后输出时间。非常感谢,您必须将时差添加到正在格式化的实例中检查编辑,应该非常清楚地解释事情