54

我想要以毫秒为单位的当前时间,然后以 12 小时格式存储它,但是使用这段代码,我得到了 24 小时格式时间。

long timeInMillis = System.currentTimeMillis();
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(timeInMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy HH:mm:ss a");
dateforrow = dateFormat.format(cal1.getTime());

有人可以建议修改以获得预期的结果吗?

4

10 回答 10

147

更改HHhh_

long timeInMillis = System.currentTimeMillis();
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(timeInMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat(
                                "dd/MM/yyyy hh:mm:ss a");
dateforrow = dateFormat.format(cal1.getTime());

请注意dd/mm/yyyy- 会给你分钟而不是月份

于 2012-12-27T10:25:01.237 回答
51

参考SimpleDataFormat JavaDoc

Letter | Date or Time Component | Presentation | Examples
---------------------------------------------------------
   H   |  Hour in day (0-23)    |    Number    |    0
   h   |  Hour in am/pm (1-12)  |    Number    |    12
于 2012-12-27T10:30:07.773 回答
6

我也以艰难的方式再次遇到这种情况。H vs h,24 小时 vs 12 小时!

于 2014-02-04T23:13:24.930 回答
5

是的,确认简单地使用"hh"而不是"HH"解决我的问题,因为"hh"是 12 小时格式和"HH"24 小时格式。

从此改变:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm aa");

对此:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");

"HH"如果您不想费心存储和处理 AM/PM,您仍然可以使用它来存储时间。然后当你检索它时,使用"hh".

于 2013-06-25T05:20:15.673 回答
3

嗨,我测试了下面运行良好的代码:

    long timeInMillis = System.currentTimeMillis();
    Calendar cal1 = Calendar.getInstance();
    cal1.setTimeInMillis(timeInMillis);
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss a");
    dateFormat.format(cal1.getTime());
于 2012-12-27T10:38:11.380 回答
2

您的代码存在三个主要问题:

  1. 使用m[Minute in hour] 代替M[Month in year]。
  2. 使用H[Hour in day (0-23)] 而不是h[Hour in am/pm (1-12)]。查看文档以了解有关这两点的更多信息。
  3. LocaleSimpleDateFormat. 选中Never use SimpleDateFormat or DateTimeFormatter without a Locale以了解更多信息。

因此,具有正确格式的实例化将是:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a", Locale.ENGLISH);

java.time

请注意,java.util日期时间 API 及其格式化 APISimpleDateFormat已过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *,该 API 于 2014 年 3 月作为 Java SE 8 标准库的一部分发布。

使用java.time现代日期时间 API 的解决方案:

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.now(ZoneOffset.UTC);
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/uuuu hh:mm:ss a", Locale.ENGLISH);
        String formatted = dtf.format(odt);
        System.out.println(formatted);
    }
}    

在这里,您可以使用y代替,u我更喜欢u使用y.

ONLINE DEMO

从Trail: Date Time了解有关现代日期时间 API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

于 2021-06-12T09:10:52.563 回答
1

你可以这样试试

  Calendar c= Calendar.getInstance();

  SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
  String str=sdf.format(c.getTime());
于 2014-09-19T05:59:27.087 回答
0
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss a");

使用hh代替HH

于 2012-12-27T10:26:21.483 回答
0

只需按照代码

public static String getFormatedDate(String strDate,StringsourceFormate,
                                     String destinyFormate) {
    SimpleDateFormat df;
    df = new SimpleDateFormat(sourceFormate);
    Date date = null;
    try {
        date = df.parse(strDate);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    df = new SimpleDateFormat(destinyFormate);
    return df.format(date);

}

并将值传递给这样的函数,

getFormatedDate("21:30:00", "HH:mm", "hh:mm aa");

或查看此文档SimpleDateFormat以获取 StringsourceFormate 和 fortuneFormate。

于 2018-04-30T04:29:11.390 回答
-1

请参见下面的代码示例:

SimpleDateFormat df = new SimpleDateFormat("hh:mm");
String formattedDate = df.format(new Date());
out.println(formattedDate);
于 2013-07-25T08:25:49.283 回答