我正在尝试将一个时区的偏移量添加到另一个时区,该时区存储在hourDifference中。它工作正常。但是,我想只输出HH:MM而不是如下所示的完整日期,并存储在新变量
中我想要的输出是什么: 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()**);
答案 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);
所以此时,date
和calendar
都只是代表某个时刻的类的实例。您通常获得的最接近的人类可读输出是自纪元以来的毫秒数。您需要再次格式化以使其可以按照您想要的方式读取,使用您最初创建的相同格式化程序实例,这次只在输出端。要做到这一点,您需要在谈论的那一刻提供格式化程序,现在最好用日历实例(添加了几个小时)来表示。不幸的是,虽然您可以将Date
实例传递给format
,但您无法传递Calendar
实例,但您可以传递UTC时间来代表该时刻:
String formatted = sdf.format(calendar.getTime())
请注意上面的行返回一个字符串,您可以打印或记录或其他任何字符串,但它实际上并不会转换日历实例所代表的时刻。
HTH