如何使用日历获取当前时间?

时间:2017-10-15 15:39:45

标签: java android calendar

我的时间以这种格式显示:11:35 PM.

但我想要这种格式:11:35 P.M.< - 注意额外的点。

这是我目前的做法:

 SimpleDateFormat("hh:mm a.").format(calendar.getTime());

这是我尝试过的,但它会崩溃:

SimpleDateFormat("hh:mm .a.").format(calendar.getTime());

3 个答案:

答案 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);