SimpleDateFormat返回不同的结果

时间:2019-07-23 05:15:13

标签: java android date simpledateformat date-parsing

我正在尝试将library(dplyr) 解析为string,但是它没有显示我制作的SimpleDateFormat格式。

这是结果:

  

2019年6月23日星期日00:00:00 GMT + 08:00

这就是我需要的:

  

2019-07-23

这是我的代码:

yyyy-MM-dd

6 个答案:

答案 0 :(得分:1)

通过以下更简单的方法来做到这一点,

        String date = year+"-"+month+"-"+dayOfMonth;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        try {
            Date datex = format.parse(date);
            String outputDate = format.format(datex);
            System.out.println(outputDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

答案 1 :(得分:0)

在扩展中添加此功能即可使用

   fun Context.getFormattedDate(
        inputFormat: String = "yyyy-MM-dd",
        outputFormat: String,
        inputDate: String,
        locale: Locale = Locale("EN")
    ): String {
        val inputFormat = inputFormat
        var outputFormat = outputFormat

        if (outputFormat == "") {
            outputFormat = "EEEE d 'de' MMMM 'del' yyyy" // if inputFormat = "", set a default output format.
        }
        var parsed: Date? = null
        var outputDate = ""

        val dfInput = SimpleDateFormat(inputFormat, locale)
        val dfOutput = SimpleDateFormat(outputFormat, locale)

        try {
            parsed = dfInput.parse(inputDate)
            outputDate = dfOutput.format(parsed)
        } catch (e: Exception) {
            Log.e("formattedDateFromString", "Exception in formate Date From string(): " + e.message)
            e.printStackTrace()
        }
        return outputDate

    }

答案 2 :(得分:0)

这将为您带来理想的结果

String date = year+"-"+month+"-"+dayOfMonth;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", 

    Locale.getDefault());
            Date datex = null;
            try {
                datex = format.parse(date);
                String formattedDate=format.format(datex);
                Log.e("FormattedDate",formattedDate);
            } catch (ParseException e) {
                e.printStackTrace();
            }

答案 3 :(得分:0)

将此功能用于日期的任何转换,都可以使用:)

在Java中

/**
 * Changes date format from one format to another format.
 *
 * @param fromFormat format of received date string.
 * @param toFormat   format of returned(needed) date string.
 * @param date       date whose format is to be changed in string.
 * @return date string formatted into toFormat
 */
public static String changeDateFormat(String fromFormat, String toFormat, String date) {
    SimpleDateFormat toDateFormat = new SimpleDateFormat(toFormat);
    SimpleDateFormat dateFormat = new SimpleDateFormat(fromFormat);

    try {
        return toDateFormat.format(dateFormat.parse(date));
    } catch (Exception e) {
        e.printStackTrace();
        return "NA";
    }
}

在科特林

fun changeDateFormat(fromFormat: String, toFormat: String, date: String): String {
        val toDateFormat = SimpleDateFormat(toFormat)
        val dateFormat = SimpleDateFormat(fromFormat)
        return try {
            toDateFormat.format(dateFormat.parse(date))
        } catch (e: Exception) {
            e.printStackTrace()
            "NA"
        }

    }

代码内

AppLogs.e(
        "DATE",
        Utility.changeDateFormat("E MMM dd HH:mm:ss Z yyyy", "yyyy-MM-dd", "Sun Jun 23 00:00:00 GMT+05:30 2019")
    )

答案 4 :(得分:0)

java.time和ThreeTenABP

这将为您提供所需的输出,2019-07-23

onDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            LocalDate date = LocalDate.of(year, month + 1, dayOfMonth);
            String dateString = date.toString();
            System.out.println(dateString);
        }
    };

我正在使用Java.time(现代Java日期和时间API)中的LocalDate。我们需要在月份上加上一个数字,因为DatePicker令人困惑地计算从1月的0到12月的11的月份,而LocalDate则用与人类相同的数字来表示月份。 LocalDate.toString()产生您要求的yyyy-MM-dd格式。符合ISO 8601。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 5 :(得分:-1)

尝试此操作对我来说可以正常工作,可以将长日期转换为简单日期。

public String getTimeStamp(long timeinMillies) {
            String date = null;
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // modify format
            date = formatter.format(new Date(timeinMillies));
            System.out.println("Today is " + date);

            return date;
        }

或使用

SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date(year, month, day);
String strDate = dateFormatter.format(d);

谢谢,编码愉快!