Is there a way to make custom date formats in Julia? - date

I would like to be able to convert
"Tue Sep 01 00:00:26 +00:00 2020"
into a date type in Julia using the built in Date function.
I only need the year, month, and date.

This is tricky because you have a time zone here hence you need to use TimeZones.jl
using TimeZones, Dates
df = Dates.DateFormat("e u d H:M:S z y");
d = ZonedDateTime("Tue Sep 01 00:00:26 +00:00 2020", df)
Let se what we got:
julia> d = ZonedDateTime("Tue Sep 01 00:00:26 +00:00 2020", df)
2020-09-01T00:00:26+00:00
julia> Date(d)
2020-09-01
For more try typying ?DateFormat in the console - you will see the docs.
Code Matches Comment
–––––––– ––––––––– ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
y 1996, 96 Returns year of 1996, 0096
Y 1996, 96 Returns year of 1996, 0096. Equivalent to y
m 1, 01 Matches 1 or 2-digit months
u Jan Matches abbreviated months according to the locale keyword
U January Matches full month names according to the locale keyword
d 1, 01 Matches 1 or 2-digit days
H 00 Matches hours (24-hour clock)
I 00 For outputting hours with 12-hour clock
M 00 Matches minutes
S 00 Matches seconds
s .500 Matches milliseconds
e Mon, Tues Matches abbreviated days of the week
E Monday Matches full name days of the week
p AM Matches AM/PM (case-insensitive)
yyyymmdd 19960101 Matches fixed-width year, month, and day

To parse dates you need the Dates.jl standard library. To parse this particular format though, I think you additionally need the TimeZones.jl package:
using Dates
using TimeZones # gives the `z` for the format below
fmt = dateformat"e u d H:M:S z y" # the format of your string
d = Date("Tue Sep 01 00:00:26 +00:00 2020", fmt)
Then you can simply look at d's values for example with:
julia> d
2020-09-01
julia> year(d)
2020
julia> month(d)
9
julia> day(d)
1

Related

Convert E, d M y HH:mm:ss x string date format to yyyy-mm-dd with databricks

everything is in the title. I tried this without success so far:
date_format(to_date(col("data")["createdAt"], 'E, d M y HH:mm:ss x'), 'yyyy-mm-dd')
all values returned are null
This is an example of input Fri, 12 Jun 20 07:49:17 +0000
to_date does not accept weekdays (E), so you need to remove that using split first. Also you need to fix the formats (note capitalization):
date_format(to_date(split(col("data")["createdAt"], ', ')[1], 'd MMM yy HH:mm:ss Z'), 'yyyy-MM-dd')

How to use formatDateTime in Azure Data Factory?

I would like to format the pipeline trigger time in this format:
10-Mar-2021 08:31:59 AM
Here is the code I am using:
#formatDateTime(pipeline().TriggerTime, 'DD-MON-YYYY HH:MI:SS AM/PM')
However the date is coming out in this format:
'DD-3ON-YYYY 08:3I:SS A3/P3'
How can I resolve this?
The formatDateTime function uses the custom date format strings which you can see listed here. A detailed breakdown
dd - the day of the month from 01 to 31. Note this is lower case and this format gives a leading 0. Using d for no leading 0
MMM - the abbreviated name of the month, eg JAN, FEB, MAR. Note this is upper case
yyyy - the year as a four-digit number. Note this is lower case
hh - the hour using a 12-hour clock from 01 to 12. Note this is lower case. As you are using AM/PM it makes sense to have the 12-hour clock rather than 24 (ie 23:00 PM would not make sense). Note this is lower case
mm - the minute from 00 to 50. Note this is lower case
ss - the second from 00 to 50. Note this is lower case
tt - the AM/PM designator. Note this is lower case
So using this information, your code should be more like this:
#formatDateTime(pipeline().TriggerTime, 'dd-MMM-yyyy hh:mm:ss tt')
I have test the expression using a Set Variable activity and got the following results:
EEE : Day ( Mon )
MMM : Month in words ( Dec )
MM : Day in Count ( 324 )
mm : Month ( 12 )
dd : Date ( 3 )
HH : Hours ( 12 )
mm : Minutes ( 50 )
ss : Seconds ( 34 )
yyyy: Year ( 2020 ) //both yyyy and YYYY are same
YYYY: Year ( 2020 )
zzz : GMT+05:30
aa : ( AM / PM )

Sas changing of date format

I have three columns with date formatted differently in SAS:
12 june 2017 00:15 - full date
2016 - only year
12 - only month
I Need to change the format of date and subtract after the dates to get results in the number of months.
for instance, "12 June 2017 00:15" - December 2016 = 7
how to do it?
As you have probably already found, there isn't a ready-made SAS date informat that will correctly handle your full date field, so you'll need to write a bit of custom logic to convert it before doing your calculation. date9. is the closest matching format I could find:
data example;
fulldate = '12 june 2017 00:15';
year = 2016;
month = 12;
/* Convert string to date9 format and input */
fulldate_num = input(
cats(
scan(fulldate,1),
substr(scan(fulldate,2,' '),1,3),
scan(fulldate,3)
), date9.
);
/* Calculate difference in months */
monthdiff = intck('month', mdy(month,1,year), fulldate_num);
run;
Convert the "full date" field to a SAS date value.
Convert the combo of year and month to a SAS date value, too.
Use the INTCK function to find the difference in months.
For example:
data dates ;
input dt $18. yy mm ;
mm_diff = intck ("mon", input (cats (yy, mm), yymmn6.), input (dt, anydtdte12.)) ;
put mm_diff= ;
cards ;
12 june 2017 00:15 2016 12
11 june 2018 00:15 2017 3
;
run ;
The log will print:
mm_diff=6
mm_diff=15
As a side note, the statement "there isn't a ready-made SAS date informat that will correctly handle your full date field" made elsewhere in this thread is incorrect. As the program snippet above shows, the ANYDTDTEw. informat handles it with aplomb. It's just incumbent upon the programmer to supply a sufficient informat width W. Above, it is selected as W=12. If you're reluctant to guess and/or count, just use ANYDTDTE32.
Regards,
Paul Dorfman
Assuming that you have three numeric variables and the first one contains valid SAS datetime values you should first convert both to valid SAS date values. You can then use the INTCK() function to count months.
nmonths = intck('month',datepart(VAR1),mdy(VAR3,1,VAR2));

Converting non-standard date into SAS date in SAS

I have a date variable in the data. The value in the variable are not well formatted. I want to convert them into SAS date format like datetime9. .
date
Nov 2 2013 10:00AM
Oct 6 2012 11:00AM
Aug 26 2002 18:00PM
Mar 22 2012 07:00AM
There are a few functions to know about.
scan(str,n) -- this pulls the nth word from a string.
catt(str1,str2,str3) -- this concatenates strings.
input(str,informat) -- this converts a string to a number using the informat
dhms(d,h,m,s) -- Day Hour Minute Second. A date, plus time parts equals a datetime.
Also DDMONYYYY is informat = date9.
HH:MM <AM|PM> is informat = time.
So...
data test;
format date $20.;
date = "Nov 2 2013 10:00AM"; output;
date = "Oct 6 2012 11:00AM"; output;
date = "Aug 26 2002 18:00PM"; output;
date = "Mar 22 2012 07:00AM"; output;
run;
data test;
set test;
format day date9. time time. date2 datetime.;
day = input(catt(scan(date,2),scan(date,1),scan(date,3)),date9.);
time = input(scan(date,4),time.);
date2 = dhms(day,hour(time),minute(time),second(time));
run;
data any;
attrib datevar format=date9.;
infile cards;
input datevar ANYDTDTM20.;
datevar=datepart(datevar);
cards;
Nov 2 2013 10:00AM
Oct 6 2012 11:00AM
Aug 26 2002 18:00PM
Mar 22 2012 07:00AM
;run;

Crystal Reports show current month as a 2 digit field

I wonder if anyone could help on this please? I need to show the current month as a 2 digit field. IE
January as 01
February as 02
March as 03
etc until
October as 10
November as 11
December as 12
The formula I am using is: ToText ("0"& Month(CurrentDate))
but shows January as 01.00
ie need to remove the decimal point and the decimal places
Many thanks, Rob
Try this:
ToText( CurrentDate, "MM")
The ToText function will automatically convert the date you are supplying to whatever format you want. You don't need to use the Month function. Per the documentation, you just supply the date and the output format. For the month, you use "MM".
ToText(CurrentDate, "MM")
According to the documention, these are the valid strings you can use
Pattern Result
d Numeric day of month without leading zero (1, 7, 31)
dd Numeric day of month with leading zero (01, 07, 31)
ddd Three day abbreviation of day of week (Mon, Sat)
dddd Full name of day of week (Monday, Saturday)
M Numeric month without leading zero (1, 7, 12)
MM Numeric month with leading zero (01, 07, 12)
MMM Three letter abbreviation of month (Jan, Feb, Mar)
MMMM Full name of month (January, February, March)
yy Last two digits of year (11, 14, 22)
yyyy Full four digits of year (2011, 2014, 2022)
To add to the above, if you need to return something like Mar-17 then:
totext({Command.DocDate},"MMM") + '-' + totext({Command.DocDate},"yy")