How can i convert String to Date when it has “TRT” in it

瘦欲@ 提交于 2021-01-28 12:23:38

问题


String sDate = "06.08.2020" // 06 day 08 month 2020 is year

This is the date i have in my txt file. I use them in JTable. To sort the table i convert them to date with this DateFormatter.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");

And it does convert the string to date as this.

LocalDate date = LocalDate.parse(sDate,formatter);
//The date : Thu Aug 06 00:00:00 TRT 2020

Now i need to convert it like the first date 06.08.2020. But i can't use date as input. Because i get it from JTable so i get it as String.

So i tryed this code.

String sDate1 = "Thu Aug 06 00:00:00 TRT 2020";// The date i get from JTable
LocalDate lastdate = LocalDate.parse(sDate1,formatter);
sDate1 = formatter.format(lastdate);

But i get an error as this Text 'Thu Aug 06 00:00:00 TRT 2020' could not be parsed at index 0.

So this cone not works fine : LocalDate lastdate = LocalDate.parse(sDate1,formatter); I cant see where is the problem.


回答1:


Where your code failed:

SimpleDateFormat sdf1=new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
String dateStr = "06.08.2020";
sdf1.parse(dateStr);

As you can see, the pattern of the SimpleDateFormat and that of the date string do not match and therefore, this code will throw ParseException.

How to make it work?

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String dateStr = "06.08.2020";
Date date = sdf.parse(dateStr);

You must have already got why it worked. It worked because the pattern of the SimpleDateFormat matches with that of the dateStr string.

Can I format the Date object (i.e. date) into the original string?

Yes, just use the same format which you used to parse the original string as shown below:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String dateStr = "06.08.2020";
Date date = sdf.parse(dateStr);

// Display in the default format
System.out.println(date);

// Format into the string
dateStr = sdf.format(date);
System.out.println(dateStr);

A piece of advice:

I recommend you switch from the outdated and error-prone java.util date-time API and SimpleDateFormat to the modern java.time date-time API and the corresponding formatting API (package, java.time.format). Learn more about the modern date-time API from Trail: Date Time.

Using the modern date-time API:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String dateStr = "06.08.2020";
LocalDate date = LocalDate.parse(dateStr, formatter);

// Display in the default format
System.out.println(date);

// Format into the string
dateStr = formatter.format(date);
System.out.println(dateStr);

I don't see any difference using the legacy API and the modern API:

That's true for this simple example but when you will need to do complex operations using date and time, you will find the modern date-time API smart and clean while the legacy API complex and error-prone.

Demo:

import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Given date-time string
        String strDate = "Thu Aug 06 00:00:00 TRT 2020";

        // Replace TRT with standard time-zone string
        strDate = strDate.replace("TRT", "Europe/Istanbul");

        // Define formatter
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzzz yyyy");

        // Parse the date-time string into ZonedDateTime
        ZonedDateTime zdt = ZonedDateTime.parse(strDate, formatter);
        System.out.println(zdt);

        // If you wish, convert ZonedDateTime into LocalDateTime
        LocalDateTime ldt = zdt.toLocalDateTime();
        System.out.println(ldt);
    }
}

Output:

2020-08-06T00:00+03:00[Europe/Istanbul]
2020-08-06T00:00



回答2:


I cannot reproduce the behaviour you describe. The following code worked fine for me:

import java.util.*;
import java.text.*;
public class MyClass {
    public static void main(String args[]) throws ParseException {
      SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
      String date = "06.08.2020";
      Date date1 = sdf.parse(date);
      String result = sdf.format(date1);

      System.out.println("Date = " + result);
    }
}

Output: Date = 06.08.2020

That being said, if at all possible you should switch to the new java.time.* API.



来源:https://stackoverflow.com/questions/63674364/how-can-i-convert-string-to-date-when-it-has-trt-in-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!