【问题标题】:Convert time value to format “hh:mm Am/Pm” using Android使用 Android 将时间值转换为“hh:mm Am/Pm”格式
【发布时间】:2013-04-11 15:47:05
【问题描述】:

我正在从数据库中获取日期值,例如“2013-02-27 06:06:30” 使用 StringTokenizer 我将分别获得时间,如下所示

String startTime = "2013-02-27 06:06:30";

StringTokenizer token = new StringTokenizer(startTime);
String date1 = token.nextToken();  
String time1 = token.nextToken(); 

及时 1 我得到结果 06:06:30,

我可以将它重新存储在另一个String类型的变量中吗?

String displayValue = "06:06 AM";

如果time1变量的值为

String time = 16:00:00;

那么它应该转换为:

String displayValue = "04:00 PM";

【问题讨论】:

    标签: android stringtokenizer android-date


    【解决方案1】:

    试试这个..

    Date dt = new Date(date1);
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
    String time1 = sdf.format(dt);
    

    【讨论】:

      【解决方案2】:

      我就这样得到了答案。

      startTime = "2013-02-27 21:06:30";
      StringTokenizer tk = new StringTokenizer(startTime);
      String date = tk.nextToken();  
      String time = tk.nextToken();
      
      SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
      SimpleDateFormat sdfs = new SimpleDateFormat("hh:mm a");
      Date dt;
      try {    
          dt = sdf.parse(time);
          System.out.println("Time Display: " + sdfs.format(dt)); // <-- I got result here
      } catch (ParseException e) {
          e.printStackTrace();
      }
      

      【讨论】:

      • 如果你的时间是 xxxx-xx-xx 12:30:00,这个答案会显示错误的时间,它显示的是 12:30 AM 而不是 12:30 PM
      • @BhavikMehta 是的,我也面临同样的问题。
      • @MehulRanpara : StackOverFlow 上已经给出了很多解决方案,随便搜索一下
      • 谢谢。非常需要帮助
      • 我也遇到了与 Bhavik Metha 相同的问题。请参阅我的解决方案答案
      【解决方案3】:

      首先您不需要使用StringTokenizer 来获取字符串时间。只需像这样传递您的startTime

      // Get date from string
      SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = dateFormatter.parse(startTime);
      
      // Get time from date
      SimpleDateFormat timeFormatter = new SimpleDateFormat("h:mm a");
      String displayValue = timeFormatter.format(date);
      
      // Done!
      

      【讨论】:

      • 这是最简单的解决方案。谢谢
      【解决方案4】:

      试试这个

       String time = "22:35";
      
      try {
           SimpleDateFormat sdf = new SimpleDateFormat("H:mm");
           Date dateObj = sdf.parse(time);
          System.out.println(dateObj);
          System.out.println(new SimpleDateFormat("K:mm").format(dateObj));
      } catch (final ParseException e) {
          e.printStackTrace();
      }
      

      追踪这个链接http://developer.android.com/reference/java/text/SimpleDateFormat.html

      【讨论】:

      • 我很困惑,我可以将 18:00:00 PM 转换为 06:00:00 PM.. 谢谢..通过使用 "KK:mm:ss aa" 我得到了结果 :)
      • 优秀的解决方案。谢谢。
      • @androidlearner 你可能正在使用HH:mm:ss aa。改为使用 hh:mm:ss aa 12 小时 AM-PM 格式
      【解决方案5】:
      Date dt = new Date(date1);
      SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
      String time1 = sdf.format(dt);
      

      凌晨 2 点输出

       Date dt = new Date(date1);
       SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a",Locale.US);
       String time1 = sdf.format(dt);
      

      凌晨 2 点输出

      【讨论】:

      • 应该是 SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a",Locale.US);
      【解决方案6】:

      我建议使用 DateFormat,例如 SimpleDateFormat

      try {
          String timeLong = "2013-02-27 06:06:30";
          String timeShort = "16:06 AM";
          SimpleDateFormat formatLong = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
          SimpleDateFormat formatShort = new SimpleDateFormat("hh:mm aa", Locale.US);
          Log.v("out", formatShort.format(formatLong.parse(timeLong)));
          Log.v("out", formatShort.format(formatShort.parse(timeShort)));
      } catch (ParseException e) {
          e.printStackTrace();
      }
      

      我今天很累,我觉得我在这段代码中遗漏了一些东西,所以我可能会稍后对其进行修改,但它确实有效并且它不会(直接)调用已弃用的 Date 类。

      【讨论】:

      • 感谢重播。我试过但没有用。它显示 java.lang.IllegalArgumentException.
      【解决方案7】:

      1 假设您需要以 09:30 PM 格式显示当前时间。这将是一个相当简单的方法。即使您当前不需要它,您也应该可以使用以下 DateFormat 来满足您的要求。

      Calendar cal = Calendar.getInstance();
      DateFormat outputFormat = new SimpleDateFormat("KK:mm a");
      String formattedTime = outputFormat.format(cal.getTime());
      

      2 注意:以下格式化程序可用于以 24 小时格式(21:30)显示相同的时间。

      new SimpleDateFormat("HH:mm");
      

      3 但是,如果您想构造与我的第一点相同的格式,最好使用以下代码,因为 Java 不鼓励使用 StringTokenizer。你可以在这里阅读它,http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html

      希望对你有帮助,谢谢!

          String startTime = "2013-02-27 21:06:30";
          String[] parts = startTime.split(" ");
      
          DateFormat outputFormat = new SimpleDateFormat("KK:mm a");
          SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm:ss");
      
      
          try {
              Date dt = parseFormat.parse(parts[1]);
              System.out.println(outputFormat.format(dt));
          } catch(ParseException exc) {
              exc.printStackTrace();
          }
      

      【讨论】:

        【解决方案8】:

        所选答案出现时间显示错误的问题。如果您的时间是 12:30:00,则会显示 12:30 AM 而不是 12:30 PM。下面的代码将有助于解决这个问题。

        SimpleDateFormat sdf = new SimpleDateFormat("KK:mm:ss");
        SimpleDateFormat sdfs = new SimpleDateFormat("hh:mm a");
        
            Date dt1 = null;
        
            try {
                dt1 = sdf.parse("12:00:00");
                Log.i("Time in Am Pm  ", sdfs.format(dt1));
        
            } catch (ParseException e) {
                e.printStackTrace();
            }
        

        【讨论】:

          【解决方案9】:

          只需使用以下模式即可获得预期结果:

              try {
                  String time = "06:06:30";
                  SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
                  Date dt = sdf.parse(time);
          
                  SimpleDateFormat sdfs = new SimpleDateFormat("hh:mm a");
                  String formatedTime = sdfs.format(dt);
          
                  Log.v("parseTime", formatedTime);
          
              } catch (ParseException e) {
                  e.printStackTrace();
              }
          

          编码愉快:)

          【讨论】:

          • 似乎重复了已接受答案中的内容(顺便说一句,这并不完全正确)?同样在 2019 年考虑不使用SimpleDateFormat。这个类是出了名的麻烦而且已经过时了。相反,您可以将 ThreeTenABP 添加到您的 Android 项目中,以便使用现代 Java 日期和时间 API java.time。使用起来感觉好多了。
          【解决方案10】:

          在 Android 上,您也有 DateFormat

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-04-08
            • 2021-02-17
            • 1970-01-01
            • 2018-07-20
            • 2014-01-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多