Power Query - Change DateTime to Text without altering format - datetime

I'm trying to convert a DateTime field to Text in Power Query.
Currently the DateTime format is dd/mm//yyyy hh:mm:ss (e.g. 02/04/2006 00:00:00)
When I change the type in Power Query to Text, the output is formatted as mmmm d yyy hh:mm AM/PM (e.g. Apr 2 2006 12:00AM)
I want to retain the original format when I convert to text, how can I do this?
Thanks

There isn't really an "original format" when it's stored as DateTime, it's just how your program chooses to represent it (which can vary regionally).
That said, you should be able to specify exactly the format you want. When you use the GUI to transform the data type it will produce a step that looks like this:
= Table.TransformColumnTypes(#"Previous Step",{{"Column1", type text}})
Modify that a bit so it looks like this instead:
= Table.TransformColumns(#"Previous Step",
{{"Column1", each DateTime.ToText(_, "MMM d yyyy hh:mm tt"), type text}})

Related

Convert date to other format other than YYYY-MM-DD

I need to convert input date coming in format YYYY-MM-DD. First I convert it into char by following:
TO_CHAR(<date_column>,'YY/MM/DD')
then try to convert it into date for this format:
to_date((TO_CHAR(<date_column>,'YY/MM/DD')),'YY/MM/DD')
As to_date always converts to default date type of YYYY-MM-DD. What other way can I use to convert this into other format. I am using Informatica Powercenter, so I can not find other function other than TO_DATE.
I think we are ignoring basics - to_date() converts to a date format. Now it can be displayed in dd/mm/yyyy depending on setup in your DB client or if you are dumping in a file probably YYYY-MM-DD. And on a date filed you cfan use TO_CHAR o convert it to any format.
So, if your input is a string and is in 'YY/MM/DD' then use TO_CHAR(TO_DATE(imp_yymmdd,'YY/MM/DD'),'DD/MM/YYYY') - output will be a string of your desired format i.e. DD/MM/YYYY.
If your input is a date then use TO_CHAR(imp_date,'DD/MM/YYYY') - output will be a string of your desired format.
Date datatype has no format. You can format a string representing a date.
Assuming your input is date, just use TO_CHAR(yourdate, 'desiredformat').
If your input is a string, you first need to convert it to date then back to string again, with the desired format applied. So:
TO_CHAR(TO_DATE(yourstring, "format-it-comes-in"), "desired-format")
Which in your case would be:
TO_CHAR(TO_DATE(yourstring, "YYYY-MM-DD"), "YY/MM/DD")

How to force DateTime field in Quicksight on string column?

I have a data set that has dates like so:
datetimecreated
2019-09-14 06:06:15.863383
2019-09-14 06:06:16.863385
When I go to edit my data set and force column datetimecreated into datatype date time, I get error:
Known date formats were not detected in this data. Provide a date format to transform this data into a known date format.
The data format I am trying to pass is this:
yyyy-MM-dd HH:mm:ss.ffffff
What am I doing wrong that this can not be detected as date field by Quicksight?
I've even tried this format:
yyyy-MM-dd HH:mm:ss
get same error as above.
First check would be if the date format is accepted in quicksight:
Quicksight User Guide pg.71
I don't think "yyyy-MM-dd HH:mm:ss:SSSSSS" is an accepted format.
In which case you may want to just extract the datetime data from the string to the most relevant format so that is usable for your analysis.
To do so you can create a calculated field based on your "datetimecreated" field using the parseDate() function:
parseDate(date, [format], [time_zone])
It's possible to create a calculated field either in the "Edit Data" section of the dataset by selecting it the dropdown menu for the "datetimecreated" field in the field list OR by selecting the option in the "Add" menu within a specific analysis.
Inserting your data into the formula would look something like this:
parseDate({datetimecreated}, yyyy-MM-dd HH:mm:ss, [time_zone])
This should create a date field with the extracted date information that you can then manipulate as with any other date and aggregate by DAY, MONTH etc.
I had this issue, I used this page for that correct formats:
https://docs.aws.amazon.com/quicksight/latest/user/parseDate-function.html
The format I required was yyyy-MM-dd'T'HH:mm:ssZ
Correct format is yyyy-MM-dd HH:mm:ss:SSSSSS

ASP.Net VB string to date based on format used in string

I'm using a JavaScript datepicker that gives me the selected date based on the language. So when the language is Dutch I get an output like 21-09-2017 (dd-mm-yyyy) And for English 21/09/2017.
When I want to cast these Strings to Dates (CDate) I get a problem with the format. Day = Month or Month = Day. What is the best way to make a Date from a string based on the format used in the string?
A solution would be to write a function for each specific culture to handle the dates but i'm guessing there is a default function in .Net??
You can use DateTime.ParseExact to get what you want as shown here.
You can provide the format like so:
dateString = "15/06/2008 08:30" //Your Date time
format = "g" //General Fromat
provider = New CultureInfo("fr-FR") //French
result = Date.ParseExact(dateString, format, provider) //Parsed Result
this will result in: 6/15/2008 8:30:00 AM
This or course only works if you know the culture. Also you may want to check out the Date Time Format Strings found here.
Convert.ToDateTime(String).ToString("dd-MM-yyyy")
OR
DateTime.ParseExact(String, "dd/MM/yyyy", CultureInfo.InvariantCulture)

How to format the datetime in c#?

I got the current datetime by using the following code.
DateTime dt = DateTime.Now;
But it is in the format of, 2015-02-23 17:25:07.123
how to convert this to the format of, "02/23/2015"?
"But it is in the format of"
No it isn't. It's just a DateTime. If you want a particular text representation, call ToString on it, specifying the format. For example:
DateTime now = DateTime.Now;
string formatted = now.ToString("MM/dd/yyyy");
You might also want to specify the culture to use for formatting - that way you could just say "Use the right short date format" for example.
See the MSDN pages on custom date/time format strings and standard date/time format strings for more details.
Try this,
String.Format("{0:MM/dd/yyyy}", dt);

SAS 9.3 DATETIME VARIABLE FORMAT AS DATE

I have a datetime22.3 variable which I would like to display as date.
for eg I want to display 17JUL2006:00:00:00.000 as 07/17/2006
How do I do this?
Thanks.
additional info:
Thanks for all the replies.
Actually, I tried to output it in the date format within proc sql. The output is being printed as ********** (stars). I am not sure what is going on.
I am trying to use INTCK in the following manner but get error. I am not sure what I am doing wrong. I would appreciate your help. Thanks.
PROC FORMAT;
PICTURE DTFMT LOW-HIGH='%0m/%0d/%Y' (DATATYPE=DATETIME);
RUN;
data want;
dt_val1='17JUL2006:00:00:00.000'dt;
dt_val2='17AUG2012:00:00:00.000'dt;
format dt_val1 dt_val2 dt_val3 dtfmt.;
dt_val3=intck('MONTH',dt_val1,dt_val2);
put dt_val3;
run;
You can't apply a standard date format directly against a datetime value, although there are some date formats you can prefix with 'DT' which will display a datetime as a date. Unfortunately the MMDDYY format is not one of these, however you could use DTDATE9. which would format your datetime as '17JUL2006'.
Another option is create your own format using the PICTURE statement, the example below will display the datetime as required.
proc format;
picture dtfmt low-high='%0m/%0d/%Y' (datatype=datetime);
run;
data want;
dt_val='17JUL2006:00:00:00.000'dt;
format dt_val dtfmt.;
run;
put(datepart(datetimevariable),yymmdd10.)
use the same princpiple in a data step
data _null_;
a='17JUL2006:00:00:00.000'd;
put a;
put 'formatted date='a MMDDYY10.;
run;
This is the output from my SAS 9.3
44 data _null_;
45 a = '17JUL2006:00:00:00:000'D;
46 put a;
47 put 'formatted ' a MMDDYY10.;
48 run;
16999
formatted 07/17/2006
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
Formatting dates in SAS can be tricky. One method I've used in a macro is this:
/* get the date time */
%let start_date=%sysfunc(datetime().,10);
/* use the DATETIME informat to format the date */
%let fmt_start_date=%sysfunc(putn(&start_date, DATETIME.));
/* format the datetime as a date */
%put "&fmt_start_date."d;
There's a bunch of different ways to format dates. You could also use the FORMAT statement if you're in a data step:
FORMAT STARTDATE YYMMDD10.;
In this case, the format of the column in the data step would give you YYYY-MM-DD and then you can separate the values and reconstruct from there.
There's additional information about SAS informats for dates here:
http://support.sas.com/documentation/cdl/en/etsug/60372/HTML/default/viewer.htm#etsug_intervals_sect008.htm
And here:
http://support.sas.com/documentation/cdl/en/etsug/63348/HTML/default/viewer.htm#etsug_intervals_sect009.htm
If you need more info or examples, please let me know.
Best of luck!
If you want to display the variable's contents as a date (without changing the underlying value), use a FORMAT statement.
proc print;
format dte mmddyys10.;
run;
proc means;
class dte;
format dte mmddyys10.;
run;
etc. Note that you can also put the FORMAT in a data step, in which case any uses of the variable will automatically pick it up.
data foo;
format dte mmddyys10.;
run;
My answer from a duplicate question:
You need to convert original SAS DATETIME value (think of it as data type) to SAS DATE value using DATEPART() function and apply appropriate format:
proc sql;
create table work.abc2
as select *, DATEPART(a.Billing_Dt) format ddmmyy10. as Bill_date
from abc;
quit;
So the point is, as Keith pointed above, to apply appropriate type of format (e.g. ddmmyy10. is the SAS Date format) to appropriate values = variable content (e.g. (unformatted) 10 is 11th January 1960 if used as date, while it's 01JAN60:00:00:10 if used as Datetime value), so you have to be sure what your values represent and convert the values if needed.
data want;
dt_val1='17JUL2006:00:00:00.000'dt;
dt_you_want=input(substr(put(dt_val1,datetime22.3),1,9),date9.);
format dt ddmmyy10.;
run;
Converts date/time var to char date var:
BLEndDatex = put(datepart(BLEndDateTime),yymmdd10.);
Create numeric sas date without time:
BLEndDate = mdy(SUBSTR(BLEndDatex,6,2),SUBSTR(BLEndDatex,9,2),SUBSTR(BLEndDatex,1,4));
Thanks to Rizier123 & Heemin posting above to the first portion.

Resources