【问题标题】:How to convert Thu Dec 17 15:37:43 GMT+05:30 2015 string to Date in android如何将 Thu Dec 17 15:37:43 GMT+05:30 2015 字符串转换为 Android 中的日期
【发布时间】:2015-12-17 11:09:28
【问题描述】:
SimpleDateFormat format =new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
format.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
try {
    long diff2=format.parse(accidentReports.getAccidentDate());
}

得到这个输出 :: Thu Dec 17 15:37:43 GMT+05:30 5

【问题讨论】:

  • 你的代码没有打印任何东西——你从哪里得到那个输出?
  • 你想要的日期格式是什么?
  • 什么是设置accidentReports.getAccidentDate()?您的格式字符串在我看来是正确的,您确定输入没有将日期设置为 5 年吗?
  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。

标签: android


【解决方案1】:

如果您需要日期对象形式的字符串,请使用:

    Date date=null;
    SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
    String temp = "Thu Dec 17 15:37:43 GMT+05:30 2015";
    try {
        date = formatter.parse(temp);
        Log.e("formated date ", date + "");
    } catch (ParseException e) {
        e.printStackTrace();
    }

您的输出是
Thu Dec 17 15:37:43 GMT+05:30 2015: 在日期对象中

再次将其转换为字符串:

    String formateDate = new SimpleDateFormat("MM-dd-yyyy").format(date);
    Log.v("output date ",formateDate);

现在你的输出是:

12-17-2015

【讨论】:

    【解决方案2】:

    在 Kotlin 中,

       private fun convertToCustomFormat(dateStr: String?): String {
            val utc = TimeZone.getTimeZone("UTC")
            val sourceFormat = SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy")
            val destFormat = SimpleDateFormat("dd-MMM-YYYY HH:mm aa")
            sourceFormat.timeZone = utc
            val convertedDate = sourceFormat.parse(dateStr)
            return destFormat.format(convertedDate)
        }
    

    输入日期:

    Sat Dec 19 12:50:57 GMT+05:30 2020
    

    输出日期格式:

    19-Dec-2020 12:50 PM
    

    解释:

    格式说明

    • EEE:日(周一)
    • MMM : 月份(十二月)
    • MM:计数天数 (324)
    • mm : 月 (12)
    • dd : 日期 (3)
    • HH : 小时 (12)
    • mm : 分钟 (50)
    • ss : 秒 (34)
    • yyyy: Year (2020) //yyyy和YYYY都一样
    • YYYY:年份(2020)
    • zzz : GMT+05:30
    • aa:(上午/下午)

    【讨论】:

    • 请不要教年轻人使用陈旧过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。是的,您可以在 Android 上使用它。对于较旧的 Android,请查看 desugaring -
    • 另外,您的destFormat 格式不正确,将在新的一年给您带来惊喜。您需要注意格式模式字母的大小写。 //yyyy 和 YYYY 都是一样的这不是真的。
    【解决方案3】:

    java.time

    java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern date-time API*

    使用现代日期时间 API:

    import java.time.OffsetDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) {
            String strDateTime = "Thu Dec 17 15:37:43 GMT+05:30 2015";
            DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("E MMM d H:m:s O u", Locale.ENGLISH);
            OffsetDateTime odt = OffsetDateTime.parse(strDateTime, dtfInput);
    
            // Default string i.e. OffsetDateTime#toString
            System.out.println(odt);
    
            // A custom string
            DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssO", Locale.ENGLISH);
            String formatted = odt.format(dtfOutput);
            System.out.println(formatted);
        }
    }
    

    输出:

    2015-12-17T15:37:43+05:30
    2015-12-17T15:37:43GMT+5:30
    

    Trail: Date Time 了解有关现代日期时间 API 的更多信息。


    * 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport 将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

    【讨论】:

      【解决方案4】:

      请检查我以前使用过的解决方案:

      SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
          try {
              String temp = "Thu Dec 17 15:37:43 GMT+05:30 2015";
              Date expiry = formatter.parse(temp);
          } catch (Exception e) {
              e.printStackTrace();
          }
      

      【讨论】:

        【解决方案5】:

        抱歉,这可能会迟到回答,但它可能会在不久的将来对任何人有所帮助。 只需在传递您的日期时调用这个简单的方法(Thu Dec 17 15:37:43 GMT+05:30 2015),您将得到如下结果:2015-12-17

         private String getFormattedDate(Date timeZone){
        
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            String formattedDate = df.format(timeZone);
            return formattedDate;
        
        }
        

        请记住,这是一个日期格式的值而不是字符串值。

        如何调用:

         getFormattedDate(date);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-06
          • 1970-01-01
          • 2019-01-14
          • 1970-01-01
          • 2020-12-07
          • 2016-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多