SimpleDateFormat返回24小时日期:如何获得12小时的约会?

时间:2012-12-27 10:24:22

标签: java android simpledateformat

我想要以毫秒为单位的当前时间然后以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());

任何人都可以提出修改以获得理想的结果吗?

10 个答案:

答案 0 :(得分:125)

HH改为hh

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 - 将为您提供分钟而非

答案 1 :(得分:39)

参考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

答案 2 :(得分:5)

我也会以艰难的方式重新遇到这个问题。 H vs h,24小时vs 12小时!

答案 3 :(得分: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());

答案 4 :(得分:3)

是的,确认只是使用hh代替HH解决了我的问题。

改变了这一点:

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

对此:

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

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

答案 5 :(得分:1)

你可以这样试试

  Calendar c= Calendar.getInstance();

  SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
  String str=sdf.format(c.getTime());

答案 6 :(得分:1)

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

  1. m [Month in year] 的位置使用 M [Minute in hour]。
  2. 使用 H [Hour in day (0-23)] 而不是 h [Hour in am/pm (1-12)]。查看 documentation 以详细了解这两点。
  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 及其格式 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time 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,而是使用 I prefer u to y

ONLINE DEMO

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


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

答案 7 :(得分:0)

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss a");

使用hh代替HH

答案 8 :(得分: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和destinyFormate。

答案 9 :(得分:-1)

请参阅下面的代码示例:

SimpleDateFormat df = new SimpleDateFormat("hh:mm");
String formattedDate = df.format(new Date());
out.println(formattedDate);