Unable to convert string into date in tMap component Talend - etl

I have gone through some similar questions but those solutions didn't worked for me I am having a date field which is String of timestamp "1631898440" I tried converting this string into date using tMap but got this error - java.lang.RuntimeException: java.text.ParseException: Unparseable date: "1631898440".
The function I am using -
row5.mydatecolumn!=null && !"".equalsIgnoreCase(row5.mydatecolumn)? TalendDate.parseDateLocale("EEE MMM dd HH:mm:ss zzz yyyy", row5.mydatecolumn, "EN") :null
Also tried -
TalendDate.parseDate("ddMMyyyy",row5.mydatecolumn)
In this I am getting this err- timestamp out of range: "898442-07-16 00:00:00+05:30"ERROR
How to resolve this issue is there anything wrong with the format of date?

In your user routine just create a fonction like this :
public static Date Convert_String_To_Date(String String_Timestamp) {
SimpleDateFormat sf = new SimpleDateFormat("ddMMyyyy");
Date date = new Date(Long.parseLong(String_Timestamp));
System.out.println("*** Date Converted to this patter ddMMyyyy : "+sf.format(date));
return TalendDate.parseDate("ddMMyyyy",sf.format(date)) ;
}
don't forget the import
import java.text.SimpleDateFormat;
import java.util.Date;
then for me i just put a tjava component where i called my fonction like below
String str = "1631898440";
System.out.println(Format_String_Date.Convert_String_To_Date(str)) ;
So , in your case you would call this fonction in your tMap like this i guess :
row5.mydatecolumn!=null && !"".equalsIgnoreCase(row5.mydatecolumn)?
Format_String_Date.Convert_String_To_Date(row5.mydatecolumn) :null
Here is the output
[statistics] connected
*** Date Converted to this patter ddMMyyyy : 19011970
Mon Jan 19 00:00:00 CET 1970
[statistics] disconnected

Related

How to get the same output of departed Date.parse() in groovy?

I have an application that runs the old version of the spring application. The application has the function to create date objects using Date.parse as follows
Date getCstTimeZoneDateNow() {
String dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
def zonedDateString = new Date().format(dateFormat, TimeZone.getTimeZone('CST'))
Date date = Date.parse(dateFormat, zonedDateString)
return date // Tue Oct 18 20:36:12 EDT 2022 (in Date)
}
However, the code above is deprecated. I need to produce the same result.
I read other posts and it seems like Calender or SimpleDateFormatter is preferred.
And I thought SimpleDateFormatter has more capabilities.
This post helped me understand more about what is going on in the following code
SimpleDateFormat parse loses timezone
Date getCstTimeZoneDateNow() {
Date now = new Date()
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
SimpleDateFormat sdf = new SimpleDateFormat()
sdf.setTimeZone(TimeZone.getTimeZone('CST'))
// cstDateTime prints times in cst
String cstDateTime = sdf.format(now) // 2022-10-18T20:36:12.088Z (in String)
// JVM current time
Date date = sdf.parse(cstDateTime) // Tue Oct 18 21:36:12 EDT 2022 (in Date)
return date
}
Here my goal is to return the date object that is in the format of Tue Oct 18 20:36:12 EDT 2022
The format is good. However, like the post says, when I do sdf.parse(), it prints in JVM time.
This means, the format is good but the time zone is off.
How can I get the exact same result as before?
It does not have to use SimpleDateFormatter. Could be anything.
Thank you so much for reading and for your time.
Perhaps the important thing is, that the Date is always neutral to the timezone. Given example shows what is to be expected to work from the Java specs:
def format = new SimpleDateFormat()
format.setTimeZone(TimeZone.getTimeZone("CST"))
println new Date()
def date = format.parse(format.format(new Date()))
printf "parsed to %s%n", date
printf "formatted to %s (%s)%n", format.format(date), format.getTimeZone().getDisplayName()
In the output, notice when using the Format and when the toString(), a different time is shown accordingly, which is perfectly fine, since first we format and then parse again in the same format, thus the same time-zone. Later, we use the Date.toString() to output the date, this time using the system default time-zone which is always used when Date.toString() is called. In the output, the time-zone shift is reflected:
Thu Oct 20 09:22:58 EDT 2022
parsed to Thu Oct 20 09:22:00 EDT 2022
formatted to 10/20/22 8:22 AM (Central Standard Time)

OffsetDateTime java8 ojdbc8 oracle insert cet to cest problem

Hello I have a problem with insert OffsetdateTime with correct timezone I have string 20110401000000000 then I do convertion to OffsetDateTime like this:
DateTimeFormatter dft =
new DateTimeFormatterBuilder()
.appendPattern("yyyyMMddHHmmss")
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
LocalDateTime dateTime = LocalDateTime.parse(pDateTimeString, dft);
OffsetDateTime of = OffsetDateTime.of(dateTime, ZoneOffset.ofHours(1));
and I get 2011-04-01T00:00+01:00 - everything is good
now I do insert to database
ps.setObject(3,of);
and in my datebase I see
is it convert in cest
curiosity -------------
if date 2021-03-03T00:00+01:00
it is correct put in database
-- my settings of my connection
c.getDefaultTimeZone() -> Europa/Zurich
c.getSessionTimeZone() -> Europa/Zurich
Thank you for help

How to convert datetime in jmeter using beanshell sampler

I have timestamp for one of my http sampler in following format
Tue Nov 07 10:28:10 PST 2017
and i need to convert it to in following format
11/07/2017 10:28:10
i tried different approaches but don't know what am i doing wrong.Can anyone help me on that.Thanks.
It's very similar to how you'd do it in Java.
Here's an example:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
String string = "Tue Nov 07 10:28:10 PST 2017";
// Original format to convert from
DateFormat formatFrom = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
// Target format to convert to
DateFormat formatTo = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.ENGLISH);
// Parse original string, using original format
Date date = formatFrom.parse(string);
// Convert to a target format
String result = formatTo.format(date);
// Just to show the output, not really necessary
log.info(result);
One catch: since target format omits the zone, local zone of the computer will be used. So for example original time 10:28:10 PST will be converted to 10:28:10 for computer in PST zone, but for computer in EST zone it will be converted to 13:28:10
I heard Groovy is the new black so given:
Date class in Groovy SDK has format() and parse() methods
It is recommended to use JSR223 Test Elements and Groovy language since JMeter 3.1
you can get the date converted in a single line of Groovy code like:
Date.parse("EEE MMM dd HH:mm:ss zzz yyyy", 'Tue Nov 07 10:28:10 PST 2017').format("dd/MM/yyyy HH:mm:ss", TimeZone.getTimeZone('PST'))
Demo:

Rails DateTime gives invalid date sometimes and not others

I've got a bunch of user-inputted dates and times like so:
date = "01:00pm 06/03/2015"
I'm trying to submit them to a datetime column in a database, and I'm trying to systemize them like this:
DateTime.strptime(date, '%m/%d/%Y %H:%M')
But I consistently get an invalid date error. What am I doing wrong? If I submit the string without strptime the record will save but it sometimes gets the date wrong.
Also, how can I append a timezone to a DateTime object?
Edit:
So .to_datetime and DateTime.parse(date) work for the date string and fail for date2. What's going on?
date2 = "03:30pm 05/28/2015"
Try using to_datetime:
date.to_datetime
# => Fri, 06 Mar 2015 13:00:00 +0000
Also if you read the documentation for DateTime#strptime, here. It states:
Parses the given representation of date and time with the given
template, and creates a date object.
Its important to note that the template sequence must match to that of input string sequence, which don't in your case - leading to error.
Update
Using to_datetime over second example will generate
ArgumentError: invalid date
This is because it expects the date to be in dd-mm-yy format. Same error will be raised for DateTime.parse as to_datetime is nothing but an api for the later. You should use strptime in-case of non-standard custom date formats. Here:
date2 = "03:30pm 05/28/2015"
DateTime.strptime(date2, "%I:%M%p %m/%d/%Y")
# => Thu, 28 May 2015 15:30:00 +0000
date = "01:00pm 06/03/2015"
DateTime.parse(date)
=> Fri, 06 Mar 2015 13:00:00 +0000
You haven't got your parameters in the correct order.
DateTime.strptime(date, '%H:%M%p %m/%d/%Y')
You'll also need to add %p for the am/pm suffix

Joda Time - String to DateTime conversion

I require some help converting the following Thu, 13 Feb 2014 16:43:58 +0000 string to type DateTime. I have a stream of tweets being stored in an ElasticSearch cluster, currently the timestamp of each tweet is mapped as a string. I wish to parse these to type DateTime.
I tried EEE, dd MMM yyyy HH:mm:ss ZZZZZ but it failed. Any help would be great.
Thanks.
You only want a single Z to represent "offset without a colon".
Also note that you should ensure that your DateTimeFormatter is using English month/day names.
For example:
import java.util.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
class Test {
public static void main(String[] args) throws Exception {
DateTimeFormatter format =
DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z")
.withLocale(Locale.US);
String text = "Thu, 13 Feb 2014 16:43:58 +0000";
System.out.println(format.parseDateTime(text));
}
}

Resources