使用updateDisplay()将24格式转换为12格式

时间:2018-12-05 06:34:50

标签: java time time-format

我被要求仅使用updateDisplay()方法更改此clockDisplay中小时的格式,小时显示可以很好地工作到小时:12:59PM,使用timeTick()方法达到1:00 PM,但是再次使用timeTick()之后,它将再次转到1:01 AM。我该如何解决这个问题?

ngOnInit() {
    this.items = [
      { label: 'A', icon: 'fa fa-home', routerLink: ['/'] },
      { label: 'B', icon: 'fa fa-home', routerLink: ['/'] }]
}

1 个答案:

答案 0 :(得分:0)

怎么了?当时间到下午1点时,您的updateDisplay方法将小时显示的值设置回1。现在您的时钟显示对象又回到了原来的状态就是说,在凌晨1点,您无法区分这两次。

如何解决?我建议您引入一个实例变量(字段)来保存信息,无论我们处于上午还是下午。您可以使用布尔变量或引入带有两个常量的enum,例如AMPM。然后,您需要在timeTick方法和setTime方法中设置此变量。然后,使用此变量来决定是在AM方法中显示字符串PM还是updateDisplay,将非常简单。

如果要求您不添加新字段,请执行以下操作:您需要将hours显示中的小时数设为23,以便您跟踪自己是否在上午或下午的时间。因此,请不要在updateDisplay中设置小时数。仅在生成的显示字符串中,将12而不是0以及1到11而不是13到23放置。

用于生产代码:在现实生活中,您不会使用像您这样的设计,而是会严重依赖标准库类来处理时间。可以在模型(当前时间)和表示形式(打印的字符串)之间更清楚地区分。因此,当前时间将保存在LocalTime中:

    private LocalTime time;

将时间提前1分钟:

        time = time.plusMinutes(1);

要显示时间,您可以使用DateTimeFormatter

    private static final DateTimeFormatter TIME_FORMATTER
            = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);

以此方式创建显示字符串:

        displayString = time.format(TIME_FORMATTER);

该代码未经测试,因此请谅解如果有错字。