在日期格式后以小写形式显示 AM 和 PM



格式化日期时间后,时间以大写形式显示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);

最新更新