【问题标题】:How to convert Date to a particular format in android?如何在android中将日期转换为特定格式?
【发布时间】:2016-03-11 11:39:11
【问题描述】:

“2016 年 3 月 10 日下午 6:30:00”这是我的日期,我想将其转换为“2016 年 3 月 10 日”。我可以在 android 中使用 SimpleDateFormat 吗?我没有得到确切的模式来转换它。请帮助并提前感谢

String date="Mar 10, 2016 6:30:00 PM";
SimpleDateFormat spf=new SimpleDateFormat("Some Pattern for above date");
Date newDate=spf.format(date);
spf= new SimpleDateFormat("dd MMM yyyy");
String date = spf.format(newDate);

这些步骤有效吗?如果是的话,有人可以给我一个这种格式的模式吗?提前致谢。

【问题讨论】:

  • 是的,我很乐意,但我应该在那里给出什么模式??

标签: java android


【解决方案1】:

这是您应该使用的修改后的代码:

String date="Mar 10, 2016 6:30:00 PM";
SimpleDateFormat spf=new SimpleDateFormat("MMM dd, yyyy hh:mm:ss aaa");
Date newDate=spf.parse(date);
spf= new SimpleDateFormat("dd MMM yyyy");
date = spf.format(newDate);
System.out.println(date);

使用hh 几个小时以获得正确的时间。

Java 8 及更高版本

Java 8 引入了用于时间操作的新类,因此在这种情况下使用以下代码:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy h:mm:ss a");
    LocalDateTime dateTime = LocalDateTime.parse(date, formatter);
    DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("dd MMM yyyy");
    System.out.println(dateTime.format(formatter2));

使用h 表示小时格式,因为在这种情况下,小时只有一位数字。

【讨论】:

    【解决方案2】:

    您可以使用以下方法解决此问题。我们只需要传递当前日期格式所需日期格式日期字符串

    private String changeDateFormat(String currentFormat,String requiredFormat,String dateString){
        String result="";
        if (Strings.isNullOrEmpty(dateString)){
            return result;
        }
        SimpleDateFormat formatterOld = new SimpleDateFormat(currentFormat, Locale.getDefault());
        SimpleDateFormat formatterNew = new SimpleDateFormat(requiredFormat, Locale.getDefault());
        Date date=null;
        try {
            date = formatterOld.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (date != null) {
            result = formatterNew.format(date);
        }
        return result;
    }
    

    此方法将以您需要的格式返回日期字符串。 在您的情况下,方法调用将是:

    String date = changeDateFormat("MMM dd, yyyy hh:mm:ss a","dd MMM yyyy","Mar 10, 2016 6:30:00 PM");
    

    【讨论】:

      【解决方案3】:

      您应该将字符串parse() 转换为日期,然后将其格式化为所需的格式。您可以使用MMM dd, yyyy HH:mm:ss a 格式来解析给定的字符串。

      这里是sn-p的代码:

      public static void main (String[] args) throws Exception
      {
          String date = "Mar 10, 2016 6:30:00 PM";
          SimpleDateFormat spf = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a");
          Date newDate = spf.parse(date);
          spf = new SimpleDateFormat("dd MMM yyyy");
          String newDateString = spf.format(newDate);
          System.out.println(newDateString);
      }
      

      输出:

      10 Mar 2016
      

      【讨论】:

        【解决方案4】:

        从字符串到日期和日期到字符串的转换

        String deliveryDate="2018-09-04";                       
        SimpleDateFormat dateFormatprev = new SimpleDateFormat("yyyy-MM-dd");
        Date d = dateFormatprev.parse(deliveryDate);
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEE dd MMM yyyy");
        String changedDate = dateFormat.format(d);
        

        【讨论】:

        • 感谢您的贡献。这既不接受问题中给出的格式,也不产生所要求的格式,也不提供其他答案中尚未出现的任何内容。它使用出了名的麻烦 SimpleDateFormat 类及其过时的朋友 Date
        【解决方案5】:

        你需要使用 SimpleDateFormat 类来为你做需要的事情

        String date = "Your input date"
         DateFormat originalFormat = new SimpleDateFormat("<Your Input format here>", Locale.US)
         DateFormat targetFormat = new SimpleDateFormat("<Your desired format here>", Locale.US)
         Date Fdate = originalFormat.parse(date)
         formattedDate = targetFormat.format(Fdate)
        

        【讨论】:

          【解决方案6】:

          为了完整起见,这里是现代版本。这适用于阅读本文的任何人,他们要么使用 Java 8 或更高版本,要么对(良好且面向未来的)外部库感到满意。

              String date = "Mar 10, 2016 6:30:00 PM";
              DateTimeFormatter parseFormatter 
                      = DateTimeFormatter.ofPattern("MMM d, uuuu h:mm:ss a", Locale.ENGLISH);
              DateTimeFormatter newFormatter 
                      = DateTimeFormatter.ofPattern("d MMM uuuu", Locale.ENGLISH);
              date = LocalDateTime.parse(date, parseFormatter).format(newFormatter);
              System.out.println(date);
          

          这将打印所需的

          10 Mar 2016
          

          请注意DateTimeFormatter 对象都使用显式语言环境。 “Mar” 和 “PM” 都是英文的,所以解析和格式化都不起作用,除非使用一些说英语的语言环境。通过明确给出它,我们使代码足够健壮,在具有其他默认语言环境的计算机和 JVM 上也能按预期运行。

          要在 Android 上使用上述内容,请使用 ThreeTenABP,请参阅How to use ThreeTenABP in Android Project。在其他 Java 6 和 7 上使用 ThreeTen Backport

          【讨论】:

            【解决方案7】:
            public static String formatDate(String fromFormat, String toFormat, String dateToFormat) {
                SimpleDateFormat inFormat = new SimpleDateFormat(fromFormat);
                Date date = null;
                try {
                    date = inFormat.parse(dateToFormat);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                SimpleDateFormat outFormat = new SimpleDateFormat(toFormat);
            
                return outFormat.format(date);
            }
            

            用途: formatDate("dd-MM-yyyy", "EEEE, dd MMMM yyyy","26-07-2019");

            结果: 2019 年 7 月 26 日星期五

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-12-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多