Date time conversion on Spark 3 - scala

I have a column Fri, 06 May 2022 13:00:00 UTC which i need to convert to the column like this 2022-05-06 06:00:00.
I have tried below code but it does not work ->
value.withColumn("endtime_utc",to_timestamp('endtime,"E, dd MMM yyyy HH:mm:ss z")).select('endtime_utc,'endtime).show()
Getting below error ->
You may get a different result due to the upgrading of Spark 3.0: Fail to recognize 'E, dd MMM yyyy HH:mm:ss z' pattern in the DateTimeFormatter. 1) You can set spark.sql.legacy.timeParserPolicy to LEGACY to restore the behavior before Spark 3.0. 2) You can form a valid datetime pattern with the guide from https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html
As a workaround when i added spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY") and it works fine.
Just curios, Is there a way we can make this transformation on spark 3 without pointing to LEGACY since new doc shows the format i used is valid?

Related

Flutter/Dart: DateFormat (using intl): how to remove zero prefix?

I am using intl pakage's DateFormat class to format dates with a format like this:
_standardDateFormat = DateFormat('MMM dd, yyyy');
This produces strings like Feb 01, 2023.
How can I have the date without the prefix of 0 when it's a single-digit date? I would like to show Feb 1, 2023. I have tried d, dd, c but they all render with the prefixed 0.
If it's a double-digit date, I would of course like to show both digits: Mar 13, 2023.
Update: the single d format is indeed working, but I needed to restart flutter build to see the effect (not sure why).

Get the date in HTTP format using _time or _dateTimeConvert function in JMeter

I have the JMeter test where I use the function ${_time()} to get the current time in epoch format.
I know how to convert this date in simple format e.g. ${__dateTimeConvert(${__time},,M/d/yyyy h:mm:ss a)}, but I'm not be able to convert the date in HTTP formats as: "EEE MMM d HH:mm:ss yyyy", "EEE, dd-MMM-yy HH:mm:ss zzz", "EEE, dd MMM yyyy HH:mm:ss zzz" , e.g. Wed, 21 Oct 2020 07:28:00 GMT.
Is it possible for listed functions or I have to use JSR223 sampler with a custom script?
You can use time function with format as
${__time(EEE MMM d HH:mm:ss yyyy,)}
Use __timeShift with only relevant format parameter:
${__timeShift(EEE MMM d HH:mm:ss yyyy)}
timeShift function returns a date in the given format with the specified amount of seconds, minutes, hours, days or months added
You can use following letters in the format string for generating custom formats
Few Examples
The format to be passed to SimpleDateFormat.Java API documentation could be useful for generating custom formats.

How to change freemarker date value?

I am getting {item.pubDate} from XML and the value is:
Mon, 02 Mar 2015 14:35:47 +0000
so I did this:
<#assign starting_point = item.pubDate?index_of(",")>
<#assign date="${item.pubDate?substring(starting_point + 1)}" />
${date?datetime("dd MMM yyyy hh:mm:ss z")?date}<br>
and the result is: Mar 2, 2015.
My question is, can we change value from Mar to March and if we can then what is the best way to do it? I could have if/elseif statements in freemarker and assign each three letter months to full month name but it looks not good. Any advice/tips will be greatly appreciated. thanks.
It doesn't mater, MMM will parse both Mar and March. The only important thing is to have at least 3 M-s, as http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html says:
If the number of pattern letters is 3 or more, the month is interpreted as text; otherwise, it is interpreted as a number.
Yes, FreeMarker follows the same datetime formatting rules as Java. Use the ?string built in for dates. You can do:
${date?datetime("dd MMM yyyy hh:mm:ss z")?string("MMMM dd, yyyy")}
Source: http://freemarker.org/docs/ref_builtins_date.html#ref_builtin_string_for_date

Unparseable Date error - Talend

I am trying to copy data from Excel to a SQL table.
I have dates generated in Excel file using RAND function. I am taking them as strings in an input and trying to convert them in date data type using tConvertType.
I have setted its datatype as 'string' in initial input and as 'date' in tConvertType's output and in tMSSqlOutput.
My job has work flow Excel input -> tConvertType -> tMap -> tMSSqlOutput.
While running the job I am getting an error which says :
java.text.ParseException: Unparseable date: "Tue Jul 17 00:00:00 EDT 1973"
I am not sure where the problem lies.
If anyone could help me with this it would be much appreciated.
Here's the screenshot of my job.
i am able to parse your given sample date please use below function in tMap for your date filed.
System.out.println(TalendDate.parseDateLocale("EEE MMM dd HH:mm:ss zzz yyyy", 'Tue Jul 17 00:00:00 EDT 1973', "EN"));
function is yourDateColumn!=null && !"".equalsIgnoreCase(yourDateColumn)? TalendDate.parseDateLocale("EEE MMM dd HH:mm:ss zzz yyyy", yourDateColumn, "EN") :null
#UmeshR: your code is working fine, but you have to handle the timezone thing as well. e.g. I am from India and when i converted the time from EDT talend converted it to my local timezone. see the screen-shot.

Groovy date parse issue

date.parse() method of groovy detects date DD and year yyyy correctly but is unable to detect the month as mmm.. As in
println new Date().parse("DD-MMM-yyyy", '22-MAR-2011')
yields output as
Sat Jan 22 00:00:00 GMT+05:30 2011
Why is the month march as MAR picked up as Jan? What can I do to make it detect the month in mmm format?
The problem is actualy that you are using DD - that means day in year
Correct way:
println new Date().parse("dd-MMM-yyyy", '22-MAR-2011')
Quick tip when formatting dates try using the reverse and see what comes out:
println new Date().format("dd-MMM-yyyy")
Groovy uses SimpleDateFormat under the hood but that's not that important since most date libraries use the same format conventions.