格式化日期时间后,时间以大写形式显示AM或PM,但我希望它以小写形式显示,例如am或pm。
这是我的代码:
public class Timeis {
public static void main(String s[]) {
long ts = 1022895271767L;
String st = null;
st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts);
System.out.println("time is " + ts);
}
}
这行得通
public class Timeis {
public static void main(String s[]) {
long ts = 1022895271767L;
SimpleDateFormat sdf = new SimpleDateFormat(" MMM d 'at' hh:mm a");
// CREATE DateFormatSymbols WITH ALL SYMBOLS FROM (DEFAULT) Locale
DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault());
// OVERRIDE SOME symbols WHILE RETAINING OTHERS
symbols.setAmPmStrings(new String[] { "am", "pm" });
sdf.setDateFormatSymbols(symbols);
String st = sdf.format(ts);
System.out.println("time is " + st);
}
}
不幸的是,标准格式设置方法不允许你这样做。乔达也没有。我认为您将不得不通过简单的后期格式替换来处理格式化日期。
String str = oldstr.replace("AM", "am").replace("PM","pm");
您可以使用使用 regepxs 的 replaceAll()
方法,但我认为上述方法可能就足够了。我不是在做一揽子toLowerCase()
因为如果您将来更改格式字符串以包含(例如)月份名称或类似名称,这可能会搞砸格式。
编辑:James Jithin的解决方案看起来好多了,正确的方法(如评论中所述)
如果您不想进行字符串替换,并且正在使用Java 8 javax.time
:
Map<Long, String> ampm = new HashMap<>();
ampm.put(0l, "am");
ampm.put(1l, "pm");
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendPattern("E M/d h:mm")
.appendText(ChronoField.AMPM_OF_DAY, ampm)
.toFormatter()
.withZone(ZoneId.of("America/Los_Angeles"));
有必要手动构建一个DateTimeFormatter
(指定单个部分),因为小写的 am/pm 没有模式符号。您可以在之前和之后使用appendPattern
。
我相信没有办法替换默认的 am/pm 符号,这使得这是在最后一个字符串上进行字符串替换的唯一方法。
Calendar c = Calendar.getInstance();
System.out.println("Current time => " + c.getTime());
SimpleDateFormat df = new SimpleDateFormat("HH:mm a");
String formattedDate = df.format(c.getTime());
formattedDate = formattedDate.replace("a.m.", "AM").replace("p.m.","PM");
TextView textView = findViewById(R.id.textView);
textView.setText(formattedDate);
试试这个:
System.out.println("time is " + ts.toLowerCase());
尽管您可以创建此处和此处详述的自定义格式
不幸的是,开箱即用的AM和PM似乎在标准的SimpleDateFormat类中不可自定义。
詹姆斯的答案很棒,如果你想要不同的风格而不是默认的am,pm。但恐怕您需要在区域设置和特定于区域设置的 AM/PM 之间进行映射,以采用覆盖。现在你只需使用java内置的java.util.Formatter类。所以一个简单的例子是这样的:
System.out.println(String.format(Locale.UK, "%1$tl%1$tp", LocalTime.now()));
它给出:
9pm
请注意,如果您想要大写,只需将"%1$tp"替换为"%1$Tp"。您可以在 http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dt 找到更多详细信息。
new SimpleDateFormat("MMM d 'at' hh:mm a", new Locale("en", "IN"));
更改为使用 AM/PM 而不是 AM/PM 的区域设置。
String today = now.format(new DateTimeFormatterBuilder()
.appendPattern("MM/dd/yyyy ")
.appendText(ChronoField.AMPM_OF_DAY)
.appendLiteral(" (PST)")
.toFormatter(Locale.UK));
输出 => 06/18/2019 上午 (太平洋标准时间)
Locale.UK =上午>或下午;Locale.US =上午>或下午;根据您的需要尝试不同的语言环境(defaul等)
像这样添加toLowarCase()
public class Timeis {
public static void main(String s[]) {
long ts = 1022895271767L;
String st = null;
st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts).toLowerCase();
System.out.println("time is " + ts);
}
}
和toUpperCase()
,如果你想要大写
这就是我们在 android studio 的 java 代码中执行的方式,将 unix 时间戳作为参数传递
private String convertTimeToTimeStamp(Long timeStamp){
SimpleDateFormat sdf=new SimpleDateFormat("hh:mm aaa", Locale.getDefault());
return sdf.format(timeStamp);
}
函数返回格式的时间 09:30 PM
dateString.toLowerCase();
字符串时间字符串=new SimpleDateFormat(" MMM d 'at' hh:mma").format(timestaamp).toLowerCase();
System.out.println("time is " + tstimeString);