Convert Julian Date + Time in GMT to calendar day + Time in EST
23 ビュー (過去 30 日間)
古いコメントを表示
Aaron J. Hendrickson
2024 年 2 月 13 日
コメント済み: Siddharth Bhutiya
2024 年 2 月 22 日
I am given three strings
year = '2024';
JDDD = 'J025'; % Julian date
GMT = '19:29:29.231' % GMT time
JDDD is the "Julian Date" specifying the number of days elapsed since Jan 1 of the current year. So 025 in JDDD corresponds to January 25th.
I would appreciate if anyone could show me how to convert this data using datetime into the format 'yyyy-MM-dd HH:mm:ss.SSS' with the time in EST.
0 件のコメント
採用された回答
Star Strider
2024 年 2 月 13 日
編集済み: Star Strider
2024 年 2 月 13 日
This works —
syear = '2024';
JDDD = 'J025'; % Julian date
GMT = '19:29:29.231'; % GMT time
doy = sscanf(JDDD,'J%3d')
DTUCT = datetime(str2double(syear),1,doy) + timeofday(datetime(GMT));
DTUCT .TimeZone = 'UCT';
DTUCT.Format = 'yyyy-MMM-dd HH:mm:ss.SSS'
DTEST = DTUCT;
DTEST.TimeZone = 'America/New_York'
The datetime function will do the day-of-year conversion automatically. For example, if the day is 250 rather than 25, datetime returns:
Out = datetime(2024,1,250,'TimeZone','GMT') + timeofday(datetime(GMT))
.
1 件のコメント
Siddharth Bhutiya
2024 年 2 月 22 日
You can do the conversion in one datetime call by using the "D" day of year format specifier and appending the timezone info in the string.
syear = '2024';
JDDD = 'J025'; % Julian date
GMT = '19:29:29.231'; % GMT time
dtStr = "" + syear + "-" + JDDD + " " + GMT + " GMT"
datetime(dtStr,InputFormat="uuuu-'J'DDD HH:mm:ss.SSS z",TimeZone="America/New_York",Format="uuuu-MMM-dd HH:mm:ss.SSS")
その他の回答 (2 件)
Dyuman Joshi
2024 年 2 月 13 日
編集済み: Dyuman Joshi
2024 年 2 月 13 日
Note that I have changed the inputs YEAR and JDDD to numeric values as they are easier to work with -
I changed the name to all capital letters as it clashed with the function year. Make sure to not use any inbuilt function names from MATLAB as names for variables/scripts.
%Inputs
YEAR = 2024;
JDDD = 25; % Julian date
GMT = '19:29:29.231'; % GMT time
%Get the date and convert to a char array
d1 = char(datetime(YEAR, 1, JDDD))
%Concatenate the date with time
vec = sprintf('%s %s', d1, GMT)
%Make a datetime element specifying UTC as the time-zone
out = datetime(vec, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss.SSS', 'TimeZone', 'UTC')
%Convert the time zone to EST
out.TimeZone = 'America/Atikokan';
%Note that there are many different IANA zone IDs for EST timezones -
%America/Atikokan, America/Jamaica and America/Panama etc, Any of these can be used
out
2 件のコメント
Dyuman Joshi
2024 年 2 月 13 日
This works with any julian day from 1st January of the given year -
%Inputs
YEAR = 2024;
JDDD = 69; % Julian date
GMT = '19:29:29.231'; % GMT time
%Get the date and convert to a char array
d1 = char(datetime(YEAR, 1, JDDD))
%Concatenate the date with time
vec = sprintf('%s %s', d1, GMT);
%Make a datetime element specifying UTC as the time-zone
out = datetime(vec, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss.SSS', 'TimeZone', 'UTC');
%Convert the time zone to EST
out.TimeZone = 'America/Atikokan';
out
Les Beckham
2024 年 2 月 13 日
It's not pretty, but it works.
yr = '2024'; %<<< renamed to avoid shadowing the year function
JDDD = 'J025'; % Julian date
GMT = '19:29:29.231' % GMT time
t = datetime(str2double(yr), 1, str2double(strrep(JDDD, 'J', '')), ...
str2double(GMT(1:2)), str2double(GMT(4:5)), str2double(GMT(7:end)), 'TimeZone', 'GMT')
t.TimeZone = 'America/New_York'
t.Format = 'yyyy-MM-dd HH:mm:ss.SSS'
Note that this will work even if JDDD is more than 31.
JDDD = 'J035';
t = datetime(str2double(yr), 1, str2double(strrep(JDDD, 'J', '')), ...
str2double(GMT(1:2)), str2double(GMT(4:5)), str2double(GMT(7:end)), 'TimeZone', 'GMT');
t.TimeZone = 'America/New_York';
t.Format = 'yyyy-MM-dd HH:mm:ss.SSS'
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Dates and Time についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!