Format timestamp from database to Java - java

I have this weird format of date and time on my Oracle SQL Developer :
2015-4-14.1.39. 33. 870000000
I tried to format the given date to MM-dd-yyyy HH:mm:ss, but it gives me exception:
java.text.ParseException: Unparseable date: "2015-4-14.1.39. 33. 870000000"
The following is the code:
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
try {
String ts = "2015-4-14.1.39. 33. 870000000";
Date date = formatter.parse(ts);
String S = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(date);
System.out.println(S);
} catch (Exception e) {
e.printStackTrace();
}

The problem is that the given date string does not match the specified format. Try use the following format:
SimpleDateFormat df = new SimpleDateFormat("yyyy-M-dd.H.m. s. S");
String ts = "2015-4-14.1.39. 33. 870000000";
df.parse(ts);
Where
yyyy for year
M for month in year
dd for day in month
H for hour in date (0-23)
m for minute in hour
s for second in minute
S for millisecond

Related

Java: How parse String to Date correct?

I try to parse a Date from a String:
String dateString = "Fr, 1. Jan";
DateFormat format = new SimpleDateFormat("EE, d. MMM");
Date date = null;
try {
date = format.parse(dateString);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(format.format(date));
And what I got as output is these:
Do, 1. Jan
Why did that happen and why isn't it the same output as the input?
You forgot the year. When you parse it, you will get in the year 1970 (the Friday will be ignored). When you parse back, you will parse the date 01 Jan 1970, which was a Thursday. This should work:
String dateString = "Fr, 1. Jan";
DateFormat format = new SimpleDateFormat("EE, d. MMM");
Date date = null;
try {
date = format.parse(dateString);
} catch (Exception e) {
e.printStackTrace();
}
date.setYear(new Date().getYear()); //alternativ: date.setYear(2016);
System.out.println(date);
System.out.println(format.format(date));
A Date in Java begins at 01-01-1970. The 1st January in 1970 was a Thursday, therefore it parses the day as Thursday instead of Friday. You would have to add a year in order to guarantee that it's a Friday.
"Do" is the first 2 letters of "Donnerstag", which is German for "Thursday". Judging by your last name "Baum" (German for "tree"), I'm guessing that is not a coincidence. Also, 1970-01-01 was a Thursday, and if you don't specify the year, you get start-of-epoch.
The date format "E" is the day-of-week as a word - the more "E"'s you specify, the more letters of that word get rendered; "EE" would render "Thursday" as "Do" in a German locale, which is suspect is your default locale.
Your code as-is explodes for me, but this similar code produces the same output you get:
String dateString = "Fri, 1. Jan";
DateFormat format = new SimpleDateFormat("EEE, d. MMM");
Date date = format.parse(dateString);
DateFormat format2 = new SimpleDateFormat("EE, d. MMM", Locale.GERMAN);
System.out.println(format2.format(date));
Output:
Do, 1. Jan

Incorrect UNIX timestamp from String Date

I am trying to convert a date in String format into UNIX timestamp, I am able to convert it but when I check the timestamp it displays incorrect date.
I am using the following code to convert a Date in String to Unix timestamp:
String selected_date = "16/11/2015 1:34 am";
datetime.setText(selected_date);
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yy hh:mm a");
Date date = null;
try {
date = dateFormat.parse(selected_date);
} catch (ParseException e) {
e.printStackTrace();
}
long unixTime = (long)date.getTime()/1000;
The output UNIX timestamp is: 1460309640
But when I convert that timestamp using a web tool it returns: 4/11/2016, 1:34:00 AM
The format
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yy hh:mm a");
is not compatible with the string
String selected_date = "16/11/2015 1:34 am";
16 can't be a month!
2015 is not a year in two digits format
The right format seems to be (not sure if kk or KK depending on hours if 0 based or not)
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy kk:mm a");

how to convert String to date using simpledateformat

i am converting string in to date object in android......
that string is coming from server in form of "2014-02-22" or something like that... i want to convert it in to my date which i can use in my application..
i am using Simple Date Format ,parse method to convert....
but this statement throws parse exception... meaning its not converting my string.. which is "2014-02-22"...
it should convert but its not....
so kindly help me in this..... i am getting null in response
#SuppressLint("SimpleDateFormat")
public static Date getDate(String string){
Date date = null;
try {
date = new Date();
date = new SimpleDateFormat("yyyy/MM/dd").parse(string);
}
catch (ParseException e) { e.printStackTrace(); }
catch (java.text.ParseException e) { e.printStackTrace(); }
return date;
}
Try as follows...
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date;
#SuppressLint("SimpleDateFormat")
public static Date getDate(String string){
date = new Date();
try {
date = format.parse(string);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date testDate = null;
try {
testDate = sdf.parse("2013-11-12");
}
catch(Exception ex) {
ex.printStackTrace();
}
int date= testDate.getDate();
int month = testDate.getMonth();
int year = testDate.getYear();
Just use SimpleDateFormat (click the link to see all format patterns).
String string = "2014-02-22";
Date date = new SimpleDateFormat("yyy-M-d", Locale.ENGLISH).parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 BOT 2010
Here's an extract of relevance from the javadoc, listing all available format patterns:
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
u Day number of week Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00

Convert string to DateFormat

i am trying to convert a string utc date to Date. by using the following code
This is My UTC String Date - 12/31/2013 8:40:00 AM
i want to convert this string to UTC Date.
static final String DATEFORMAT = "dd/MM/yyyy HH:mm:ss aa";
StringDateToDate("**12/31/2013 8:40:00 AM**");
public static Date StringDateToDate(String StrDate)
{
Date dateToReturn = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
dateToReturn = dateFormat.parse(StrDate);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
but i am getting the wrong date in wrong format (sun jul 12 19:40:00 CDT 2015). how can i convert this utc date string to utc date. i am getting the utcdatestring from a rest webservice in XML format.
Just try this. Probably the order of your Date Format is wrong
String dtStart = "12/31/2013 8:40:00 AM";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aa");
Date date = format.parse(dtStart);
System.out.println(date);
First your date format is wrong it should be :
static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";
secondly, your input has to not have the asterixs(*) like this :
Date a = StringDateToDate("12/31/2013 8:40:00 AM");
//yea I know I should be using Log but I'm testing on java
System.out.println(a.toString());
If you really want the asterixs, do this :
String b = "**12/31/2013 8:40:00 AM**";
StringDateToDate(b.substring(2, b.length()-2));
Your input is wrong(there is no 31 month) , change it to a valid month
StringDateToDate("12/01/2013 8:40:00 AM");
to be compatible with the DateFormat
or Change your Dateformat to suit your input value
static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";
Change your dateformat like this.
String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
u Day number of week Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
This is the Date and Time Patterns.
String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
System.out.println(date);
Your date format should be this in order to parse the String you have given here.
static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";
And also watch out for HH. HH is Hour in day (0-23). If your input date hour is 0-11 (possibly like this since AM\PM is given and patter has aa at the end) then KK must be used instead of HH.
The result obtained is not wrong but it is what expected.
By default, parsing is lenient. With lenient parsing, the parser may use heuristics to interpret inputs that do not precisely match this object's format.
The heuristics uses the number specified for month not as months in the specified year but as months since the specified year, 31 months are 2 years and 7 months so: 01/2013 + 2years + 7 months = 07/2015.
This can be confusing so the suggestion is to set the lenient parsing to false before parsing but when pattern doesn't match something in your string a parsing exception is thrown.
public static Date StringDateToDate(String StrDate) {
Date dateToReturn = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
dateFormat.setLenient(false);
try {
dateToReturn = dateFormat.parse(StrDate);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}

date parsing in java

I have written following program to convert date string to sql date object to store in db2 but the ouput shown is 2013-01-02 instead of 2013-02-02. can anyone explain why??
String string = "02/02/2013";
Date date = null;
try {
date = new SimpleDateFormat("dd/mm/yyyy", Locale.ENGLISH).parse(string);
java.sql.Date newDate=new java.sql.Date(date.getTime());
System.out.println(newDate);
} catch (ParseException e) {
e.printStackTrace();
}
For month you should use MM instead of mm. mm is used for minutes in hour: -
date = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH)
your format should be
"dd/MM/yyyy"
note that mm is for minutes whereas MM is for Month
Check the Doc

Categories

Resources