以AM / PM以12小时格式显示当前时间


184

当前时间显示为13:35 PM, 但是我想显示为AM / PM的12小时格式,即1:35 PM而不是13:35 PM

当前代码如下

private static final int FOR_HOURS = 3600000;
private static final int FOR_MIN = 60000;
public String getTime(final Model model) {
    SimpleDateFormat formatDate = new SimpleDateFormat("HH:mm a");
    formatDate.setTimeZone(userContext.getUser().getTimeZone());
    model.addAttribute("userCurrentTime", formatDate.format(new Date()));
    final String offsetHours = String.format("%+03d:%02d", userContext.getUser().getTimeZone().getRawOffset()
    / FOR_HOURS, Math.abs(userContext.getUser().getTimeZone().getRawOffset() % FOR_HOURS / FOR_MIN));
    model.addAttribute("offsetHours",
                offsetHours + " " + userContext.getUser().getTimeZone().getDisplayName(Locale.ROOT));
    return "systemclock";
}

7
试试SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh 2013年

1
上面的问题是在2013年问的,而您在2014年提到的问题是怎么回事,那么上面的问题又是快速问题的重复,也是两个问题都要求使用不同的技术
ronan

4
@ J-Dizzle Java问题如何与Swift问题重复?
Mark Rotteveel

道歉,您是对的!
J-Dizzle

Answers:


452

最简单的方法,通过使用最新模式得到它- h:mm a,其中

  • h-上午/下午的小时数(1-12)
  • m-小时
  • a-上午/下午标记

程式码片段:

DateFormat dateFormat = new SimpleDateFormat("hh:mm a");

阅读有关文档的更多信息-SimpleDateFormat Java 7


61
请注意,使用两个h(“ hh”)会给您一个前导零(即01:23 AM)。一个“ h”给您小时,而没有前导零(1:23 AM)。
本·雅库本(Ben Jakuben)2014年

9
如何获得上午和下午,而不是“AM”和“时三十分”
阿卡什BS

@akashbs我认为没有简单的方法,但是您可以尝试以下操作:在完整的日期字符串中,从(length-4)到(length -1)调用子字符串,然后将其保存在variable_original中,然后创建一个新的variable_modified,它将使用第一个创建的variable_original并将“ .m”替换为“ m”,然后在返回完整日期字符串之后调用toUpperCase方法,并调用replace(variable_original,variable_modified),这将实现您的期望
Tamim Attafi

@akashbs但是您可以使用本地人,每个本地人使用不同的日期格式,我相信使用美国本地人也可以实现您想要的功能
Tamim Attafi

@akashbs有关更多信息,请查看以下文档:developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

使用"hh:mm a"代替"HH:mm a"。这里hh12小时制和HH24小时格式。

现场演示


谢谢@RuchiraGayanRanaweei ...我只是想捕获24格式并将其转换为AM / PM格式...
gumuruh 2014年

这个很重要。我只是遇到了一种情况,因为我使用了错误的小时占位符,所以将“ Nov 18 2016 5:28 PM”转换为“ 2016-11-18T05:28:00”而不是“ 2016-11-18T17:28:00”。谢谢!
Kekzpanda

20
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa");
String formattedDate = dateFormat.format(new Date()).toString();
System.out.println(formattedDate);

输出:13年9月11日下午12.25.15.375


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h用于AM / PM时间(1-12)。

  • H使用24小时(1-24)。

  • a是AM / PM标记

  • m是小时

注意:两个小时将打印一个前导零:01:13 PM。将打印一个小时,且不带前导零:1:13 PM。

看起来基本上每个人都已经击败了我,但是我离题了


11
// hh:mm will print hours in 12hrs clock and mins (e.g. 02:30)
System.out.println(DateTimeFormatter.ofPattern("hh:mm").format(LocalTime.now()));

// HH:mm will print hours in 24hrs clock and mins (e.g. 14:30)
System.out.println(DateTimeFormatter.ofPattern("HH:mm").format(LocalTime.now())); 

// hh:mm a will print hours in 12hrs clock, mins and AM/PM (e.g. 02:30 PM)
System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(LocalTime.now())); 

好吧,这是我在这里找到的最佳答案,谢谢
Martin Volek '19年

7

使用Java 8:

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
System.out.println(localTime.format(dateTimeFormatter));

输出为AM/PM格式。

Sample output:  3:00 PM

Locale通过调用withLocale该格式化程序对象来指定a ,以确定用于生成AM/ PM文本的人类语言和文化规范。
罗勒·布尔克

5

只需替换下面的语句,它将起作用。

SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");

3

如果您想使用Android中的 AM,PM 使用当前时间

String time = new SimpleDateFormat("hh : mm a", Locale.getDefault()).format(Calendar.getInstance().getTime());

如果您要与上午,下午

String time = new SimpleDateFormat("hh : mm a", Locale.getDefault()).format(Calendar.getInstance().getTime()).toLowerCase();

要么

从API级别26开始

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
String time = localTime.format(dateTimeFormatter);

2
在2019年,请不要教年轻的孩子使用已经过时且臭名昭著的SimpleDateFormat课程。至少不是第一选择。也并非毫无保留。今天,我们java.time在现代Java日期和时间API及其功能方面有了很多改进DateTimeFormatter
Ole VV

1
谢谢。如果您将Three.TenABP(java.time的反向端口)添加到Android项目中,那么现代的答案也可以在低API级别上使用。请参阅如何在Android Project中使用ThreeTenABP(对于像这样的简单任务,该值可能值得商,,但对于稍多的日期和时间工作,我建议使用)。
Ole VV

由于AM和PM除了英语以外几乎不用于其他语言,因此我可能会使用DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(或其他英语语言环境)。
Ole VV

2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

这将显示日期和时间


2
    //To get Filename + date and time


    SimpleDateFormat f = new SimpleDateFormat("MMM");
    SimpleDateFormat f1 = new SimpleDateFormat("dd");
    SimpleDateFormat f2 = new SimpleDateFormat("a");

    int h;
         if(Calendar.getInstance().get(Calendar.HOUR)==0)
            h=12;
         else
            h=Calendar.getInstance().get(Calendar.HOUR)

    String filename="TestReport"+f1.format(new Date())+f.format(new Date())+h+f2.format(new Date())+".txt";


The Output Like:TestReport27Apr3PM.txt

方式太令人费解且不直观。如果必须使用不推荐使用的SimpleDateFormat,则至少将所有内容放在一个调用中。另外,请解释为什么您使用12而不是从午夜到1的实际小时。而且,没有人问文件名。
罗伯特

2

tl; dr

让JSR 310 的现代java.time类自动生成本地化的文本,而不是对12小时制和AM / PM进行硬编码。

LocalTime                                     // Represent a time-of-day, without date, without time zone or offset-from-UTC.
.now(                                         // Capture the current time-of-day as seen in a particular time zone.
    ZoneId.of( "Africa/Casablanca" )          
)                                             // Returns a `LocalTime` object.
.format(                                      // Generate text representing the value in our `LocalTime` object.
    DateTimeFormatter                         // Class responsible for generating text representing the value of a java.time object.
    .ofLocalizedTime(                         // Automatically localize the text being generated.
        FormatStyle.SHORT                     // Specify how long or abbreviated the generated text should be.
    )                                         // Returns a `DateTimeFormatter` object.
    .withLocale( Locale.US )                  // Specifies a particular locale for the `DateTimeFormatter` rather than rely on the JVM’s current default locale. Returns another separate `DateTimeFormatter` object rather than altering the first, per immutable objects pattern.
)                                             // Returns a `String` object.

上午10:31

自动本地化

您可能不想让java.time自动为您本地化,而不是坚持使用AM / PM的12小时制。致电DateTimeFormatter.ofLocalizedTime

要本地化,请指定:

  • FormatStyle 确定字符串应该是多长或缩写。
  • Locale 确定:
    • 用于翻译日名,月名等的人类语言
    • 文化规范决定的缩写,大小写,标点符号,分离器,和这样的问题。

在这里,我们获得在特定时区中看到的当前时间。然后,我们生成表示该时间的文本。我们将加拿大文化本地化为法语,然后将美国文化本地化为英语。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalTime localTime = LocalTime.now( z ) ;

// Québec
Locale locale_fr_CA = Locale.CANADA_FRENCH ;  // Or `Locale.US`, and so on.
DateTimeFormatter formatterQuébec = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_fr_CA ) ;
String outputQuébec = localTime.format( formatterQuébec ) ;

System.out.println( outputQuébec ) ;

// US
Locale locale_en_US = Locale.US ;  
DateTimeFormatter formatterUS = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_en_US ) ;
String outputUS = localTime.format( formatterUS ) ;

System.out.println( outputUS ) ;

看到此代码在IdeOne.com上实时运行

10小时31

上午10:31



0

将当前的移动日期和时间格式输入

2018年2月9日10:36:59 PM

Date date = new Date();
 String stringDate = DateFormat.getDateTimeInstance().format(date);

你可以把它展示给你的ActivityFragmentCardViewListView用在任何地方TextView

` TextView mDateTime;

  mDateTime=findViewById(R.id.Your_TextViewId_Of_XML);

  Date date = new Date();
  String mStringDate = DateFormat.getDateTimeInstance().format(date);
  mDateTime.setText("My Device Current Date and Time is:"+date);

  `

0
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Date;

public class Main {
   public static void main(String [] args){
       try {
            DateFormat parseFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm a");
            String sDate = "22-01-2019 13:35 PM";
            Date date = parseFormat.parse(sDate);
            SimpleDateFormat displayFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
            sDate = displayFormat.format(date);
            System.out.println("The required format : " + sDate);
        } catch (Exception e) {}
   }
}

3
你在吃个例外。异常处理程序至少应提供警告。
SL Barth-恢复莫妮卡

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.