我想要以毫秒为单位的当前时间然后以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());
任何人都可以提出修改以获得理想的结果吗?
答案 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)
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)
改变了这一点:
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)
您的代码存在三个主要问题:
m
[Month in year] 的位置使用 M
[Minute in hour]。H
[Hour in day (0-23)] 而不是 h
[Hour in am/pm (1-12)]。查看 documentation 以详细了解这两点。Locale
与 SimpleDateFormat
一起使用。查看 Never use SimpleDateFormat or DateTimeFormatter without a Locale 以了解更多信息。因此,具有正确格式的实例化将是:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a", Locale.ENGLISH);
请注意,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
。
从 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 desugaring 和 How 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);