我的时间以这种格式显示:11:35 PM.
但我想要这种格式:11:35 P.M.
< - 注意额外的点。
这是我目前的做法:
SimpleDateFormat("hh:mm a.").format(calendar.getTime());
这是我尝试过的,但它会崩溃:
SimpleDateFormat("hh:mm .a.").format(calendar.getTime());
答案 0 :(得分:4)
如果您想覆盖 AM / PM文本,但保留正常格式,请使用DateFormatSymbols
对象。
使用SimpleDateFormat
可确保DateFormatSymbols symbols = DateFormatSymbols.getInstance(Locale.US);
symbols.setAmPmStrings(new String[] { "A.M.", "P.M." });
SimpleDateFormat fmt = new SimpleDateFormat("hh:mm a", symbols);
Calendar cal = Calendar.getInstance();
cal.setTime(fmt.parse("10:23 A.M."));
cal.add(Calendar.MINUTE, 500); // 8 hrs 20 mins
System.out.println(fmt.format(cal.getTime())); // prints: 06:43 P.M.
可用于解析和格式化。
与my other answer相反,此解决方案的优势在于,您不会受到JDK在未来版本和/或其他JDK实现中更改特定语言环境格式的影响。
以下示例使用美国英语的标准格式,但是将AM / PM文本覆盖为句点大写。该示例显示解析和格式化都有效。
{{1}}
答案 1 :(得分:2)
使用DateFormatSymbols
,如my other answer所示,更可靠。我将此答案作为区域设置对日期格式的影响的说明。
只有3个语言环境似乎使用p.m.
和a.m.
(在我的JDK 1.8.0_91上):
es-US
ga
ga-IE
所以你可以设置语言环境,例如
SimpleDateFormat fmt = new SimpleDateFormat("hh:mm a", Locale.forLanguageTag("es-US"));
System.out.println(fmt.format(new Date(2000,0,1,12,1))); // prints: 12:01 p.m.
如果要检查区域设置对特定格式字符串的影响,请运行以下代码:
Date am = new Date(2017,0,1,6,0);
Date pm = new Date(2017,0,1,18,0);
Map<String, Set<String>> map = new TreeMap<>();
for (Locale locale : Locale.getAvailableLocales()) {
SimpleDateFormat fmt = new SimpleDateFormat("hh:mm a", locale);
String s = fmt.format(am) + " " + fmt.format(pm);
map.computeIfAbsent(s, k -> new TreeSet<>()).add(locale.toLanguageTag());
}
map.entrySet().forEach(System.out::println);
在我的JDK上,它创建了这个输出:
06:00 AM 06:00 PM=[be, be-BY, bg, bg-BG, ca, ca-ES, da, da-DK, de, de-AT, de-CH, de-DE, de-GR, de-LU, en, en-AU, en-CA, en-GB, en-IE, en-IN, en-MT, en-NZ, en-PH, en-SG, en-US, en-ZA, es, es-AR, es-BO, es-CL, es-CO, es-CR, es-CU, es-DO, es-EC, es-ES, es-GT, es-HN, es-MX, es-NI, es-PA, es-PE, es-PR, es-PY, es-SV, es-UY, es-VE, et, et-EE, fr, fr-BE, fr-CA, fr-CH, fr-FR, fr-LU, he, he-IL, hi, hr, hr-HR, id, id-ID, is, is-IS, it, it-CH, it-IT, lt, lt-LT, lv, lv-LV, mk, mk-MK, ms, ms-MY, nl, nl-BE, nl-NL, nn-NO, no, no-NO, pl, pl-PL, pt, pt-BR, pt-PT, ro, ro-RO, ru, ru-RU, sk, sk-SK, sl, sl-SI, sr, sr-BA, sr-CS, sr-Latn, sr-Latn-BA, sr-Latn-ME, sr-Latn-RS, sr-ME, sr-RS, tr, tr-TR, uk, uk-UA, und]
06:00 DE 06:00 DU=[hu, hu-HU]
06:00 PD 06:00 MD=[sq, sq-AL]
06:00 QN 06:00 WN=[mt, mt-MT]
06:00 SA 06:00 CH=[vi, vi-VN]
06:00 a.m. 06:00 p.m.=[es-US, ga, ga-IE]
06:00 ap. 06:00 ip.=[fi, fi-FI]
06:00 dop. 06:00 odp.=[cs, cs-CZ]
06:00 fm 06:00 em=[sv, sv-SE]
06:00 ΠΜ 06:00 ΜΜ=[el-CY]
06:00 πμ 06:00 μμ=[el, el-GR]
06:00 ص 06:00 م=[ar, ar-AE, ar-BH, ar-DZ, ar-EG, ar-IQ, ar-JO, ar-KW, ar-LB, ar-LY, ar-MA, ar-OM, ar-QA, ar-SA, ar-SD, ar-SY, ar-TN, ar-YE]
06:00 ก่อนเที่ยง 06:00 หลังเที่ยง=[th, th-TH]
06:00 上午 06:00 下午=[zh, zh-CN, zh-HK, zh-SG, zh-TW]
06:00 午前 06:00 午後=[ja, ja-JP, ja-JP-u-ca-japanese-x-lvariant-JP]
06:00 오전 06:00 오후=[ko, ko-KR]
०६:०० पूर्वाह्न ०६:०० अपराह्न=[hi-IN]
๐๖:๐๐ ก่อนเที่ยง ๐๖:๐๐ หลังเที่ยง=[th-TH-u-nu-thai-x-lvariant-TH]
答案 2 :(得分:-1)
Redmi Note 3等一些设备默认使用a.m.和p.m。
格式化后,将所有内容替换为a.m.和pm,并使用p.m。
var rest = Math.floor((Math.random() * 2) + 1);
var rest2 = rest === 1 ? 2 : 1;
console.log("Random " + rest);
console.log("Num: " + rest2);