Java日期 - 上午12点存储为24?

Sid*_*911 2 java format calendar date simpledateformat

所以我和我的合作伙伴已经在这个项目上工作了一段时间.我们在这个项目中使用了很多日期,我们最近发现了一个问题,而且我们现在处于相当深刻的地位.

我们将时间存储在SQLlite(Android项目)中作为格式化字符串,因为很多时候它们直接绑定到listviews等.

我注意到的问题,我发现有点奇怪,就是那个SimpleDateTimeFormat对象,当用于格式化为24小时(它是一个基于医疗的项目,所以24小时是这里的惯例)12:00 am-12:59am格式化为24:00-24:59,而不是00:00-00:59 ......

在我们查询数据库并按日期排序结果之前,这不是太大的问题,上午12:00和上午12:59之间的任何数据都将显示在列表的末尾,但它应显示在一开始......

其他人遇到过这个问题?或知道解决方法?最好的方法是将数据存储为00:00而不是24:00.

干杯

Jon*_*eet 5

我强烈怀疑你使用了错误的模式.我们必须猜测你没有发布任何代码(提示,提示),但我怀疑你使用的模式如

kk:mm:ss
Run Code Online (Sandbox Code Playgroud)

代替

HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

示例代码:

import java.util.*;
import java.text.*;

public class Test {
    public static void main(String[] args) throws Exception {
        SimpleDateFormat broken = new SimpleDateFormat("kk:mm:ss");
        broken.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
        SimpleDateFormat working = new SimpleDateFormat("HH:mm:ss");
        working.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

        Date epoch = new Date(0);

        System.out.println(broken.format(epoch));
        System.out.println(working.format(epoch));
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,正如其他人所指出的那样,您不应该以字符串格式存储您的值以开始...尽可能避免字符串转换,因为每次转换都是潜在的痛点.