diff --git a/.github/badges/code_issues.svg b/.github/badges/code_issues.svg
index e8959d0e5..ef1396f28 100644
--- a/.github/badges/code_issues.svg
+++ b/.github/badges/code_issues.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/code/+nansen/+dataio/@DataSet/DataSet.m b/code/+nansen/+dataio/@DataSet/DataSet.m
index 187ffad4e..e927bd074 100644
--- a/code/+nansen/+dataio/@DataSet/DataSet.m
+++ b/code/+nansen/+dataio/@DataSet/DataSet.m
@@ -117,7 +117,7 @@ function onIsArchiveSet(obj)
function str = getDatePrefix(obj)
if isempty(obj.DatePrefixStr_)
- obj.DatePrefixStr_ = datestr(now, 'yyyymmdd_HH_MM_SS');
+ obj.DatePrefixStr_ = char(datetime('now'), 'yyyyMMdd_HH_mm_ss');
end
if obj.IsArchive
diff --git a/code/+nansen/+internal/reset.m b/code/+nansen/+internal/reset.m
index 2056a5dd7..efd0c8ab5 100644
--- a/code/+nansen/+internal/reset.m
+++ b/code/+nansen/+internal/reset.m
@@ -33,7 +33,7 @@ function reset()
fullfile(nansenRootPath, '_userdata', 'settings') };
backupPath = fullfile(nansenRootPath, '_userdata', 'backup', ...
- datestr(now, 'yyyy_mm_dd_HHMMSS'));
+ char(datetime('now'), 'yyyy_MM_dd_HHmmss'));
for i = 1:numel(folderPath)
diff --git a/code/+nansen/+manage/+options/OptionsSet.m b/code/+nansen/+manage/+options/OptionsSet.m
index a86ca3b50..75c1cce2e 100644
--- a/code/+nansen/+manage/+options/OptionsSet.m
+++ b/code/+nansen/+manage/+options/OptionsSet.m
@@ -27,5 +27,5 @@
end
end
- % = datestr(t, 'yyyy.mm.dd - HH:MM:SS')
+ % = char(datetime(t, 'ConvertFrom', 'datenum'), 'yyyy.MM.dd - HH:mm:ss')
end
diff --git a/code/+nansen/+manage/OptionsManager.m b/code/+nansen/+manage/OptionsManager.m
index d40db8915..66e0309db 100644
--- a/code/+nansen/+manage/OptionsManager.m
+++ b/code/+nansen/+manage/OptionsManager.m
@@ -1492,7 +1492,7 @@ function refreshCustomOptions(obj)
S.Description = descr;
S.Options = opts;
S.DateCreatedNum = t;
- S.DateCreated = datestr(t, 'yyyy.mm.dd - HH:MM:SS');
+ S.DateCreated = char(datetime(t, 'ConvertFrom', 'datenum'), 'yyyy.MM.dd - HH:mm:ss');
end
function S = getEmptyOptionsSet()
diff --git a/code/+nansen/+processing/@MotionCorrectionPreview/MotionCorrectionPreview.m b/code/+nansen/+processing/@MotionCorrectionPreview/MotionCorrectionPreview.m
index f4b0dde3a..385fecc14 100644
--- a/code/+nansen/+processing/@MotionCorrectionPreview/MotionCorrectionPreview.m
+++ b/code/+nansen/+processing/@MotionCorrectionPreview/MotionCorrectionPreview.m
@@ -104,7 +104,7 @@ function assertPreviewOptionsValid(obj)
namePostfix = strcat(lower(obj.Name), '_preview');
namePostfix = strrep(namePostfix, ' ', '_');
- datePrefix = datestr(now, 'yyyymmdd_HH_MM_SS');
+ datePrefix = char(datetime('now'), 'yyyyMMdd_HH_mm_ss');
folderName = strcat(datePrefix, '_', namePostfix);
if ~isempty(obj.DataIoModel)
diff --git a/code/algorithms/+flufinder/+longitudinal/MultiSessionRoiCollection.m b/code/algorithms/+flufinder/+longitudinal/MultiSessionRoiCollection.m
index ec1bad259..fbfec18cf 100755
--- a/code/algorithms/+flufinder/+longitudinal/MultiSessionRoiCollection.m
+++ b/code/algorithms/+flufinder/+longitudinal/MultiSessionRoiCollection.m
@@ -242,9 +242,9 @@
sessionIDs = {obj.SessionID};
dateStrings = cellfun(@(sid) sid(7:14), sessionIDs, 'uni', 0);
- dateNumbers = datenum(dateStrings, 'yyyymmdd');
+ dates = datetime(dateStrings, 'InputFormat', 'yyyyMMdd');
- [~, sortInd] = sort(dateNumbers);
+ [~, sortInd] = sort(dates);
obj = obj(sortInd);
end
diff --git a/code/apps/+fovmanager/@App/App.m b/code/apps/+fovmanager/@App/App.m
index 0eb93c906..8b47b1b1e 100644
--- a/code/apps/+fovmanager/@App/App.m
+++ b/code/apps/+fovmanager/@App/App.m
@@ -1094,7 +1094,7 @@ function saveCurrentDisplay(obj)
mouseName = 'fov';
end
fileName = sprintf('%s_%s_%s.png', ...
- datestr(now, 'yyyy_mm_dd_HHMMSS'), ...
+ char(datetime('now'), 'yyyy_MM_dd_HHmmss'), ...
mouseName, ...
'brainMap' );
diff --git a/code/apps/+imviewer/@App/App.m b/code/apps/+imviewer/@App/App.m
index 431c3da9f..ed43229b2 100755
--- a/code/apps/+imviewer/@App/App.m
+++ b/code/apps/+imviewer/@App/App.m
@@ -4150,7 +4150,7 @@ function saveImage(obj, savePath)
end
function saveImageToDesktop(obj)
- filename = strcat('imviewer_', datestr(now, 'yyyy_mm_dd-HH.MM.SS'), '.tif');
+ filename = strcat('imviewer_', char(datetime('now'), 'yyyy_MM_dd-HH.mm.ss'), '.tif');
savePath = fullfile(getDesktop, filename);
obj.saveImage(savePath)
diff --git a/code/apps/+mclassifier/manualClassifier.m b/code/apps/+mclassifier/manualClassifier.m
index 46ff1bd22..6d938ad0c 100644
--- a/code/apps/+mclassifier/manualClassifier.m
+++ b/code/apps/+mclassifier/manualClassifier.m
@@ -637,7 +637,7 @@ function keyPress(obj, src, event)
case 'p'
if contains(event.Modifier, 'command')
im = frame2im(getframe(obj.hTiledImageAxes.Axes));
- filename = strcat( datestr(now, 'yyyy_mm_dd_HHMMSS'), '_printscreen.tif');
+ filename = strcat( char(datetime('now'), 'yyyy_MM_dd_HHmmss'), '_printscreen.tif');
imwrite(im, fullfile(getDesktop, filename), 'TIFF')
end
diff --git a/code/apps/+nansen/@TaskProcessor/TaskProcessor.m b/code/apps/+nansen/@TaskProcessor/TaskProcessor.m
index b136775d9..9934ff6e8 100644
--- a/code/apps/+nansen/@TaskProcessor/TaskProcessor.m
+++ b/code/apps/+nansen/@TaskProcessor/TaskProcessor.m
@@ -375,7 +375,7 @@ function loadTaskLists(obj, filePath)
obj.TaskHistory = S.taskListHistory;
catch ME
% Back up file
- dateStr = datestr(now, 'yyyymmdd_HH_MM_SS');
+ dateStr = char(datetime('now'), 'yyyyMMdd_HH_mm_ss');
filePathBackup = strrep(filePath, '.mat', sprintf('corrupted_%s.mat', dateStr));
movefile(filePath, filePathBackup);
@@ -452,7 +452,7 @@ function onTimerPeriodSet(obj)
function taskItem = updateTaskWhenFinished(obj, taskItem)
%updateTaskWhenFinished Update task item from the running task obj
- date2str = @(dt) datestr(dt, 'yyyy.mm.dd HH:MM:SS');
+ date2str = @(dt) char(dt, 'yyyy.MM.dd HH:mm:ss');
finishDateStr = date2str(obj.runningTask.FinishDateTime);
elapsedDuration = obj.runningTask.FinishDateTime - obj.runningTask.StartDateTime;
@@ -460,7 +460,7 @@ function onTimerPeriodSet(obj)
% Update table status
taskItem.timeStarted = obj.runningTask.StartDateTime;
taskItem.timeFinished = finishDateStr;
- taskItem.elapsedTime = datestr(elapsedDuration, 'HH:MM:SS');
+ taskItem.elapsedTime = char(elapsedDuration, 'hh:mm:ss');
% Add diary and error stack
taskItem.Diary = obj.runningTask.Diary;
@@ -650,11 +650,11 @@ function addCommandWindowTaskToHistory(obj, taskItem)
% Todo: Streamline a bit more, and combine with similar parts
% from updateTaskWhenFinished.
- date2str = @(dt) datestr(dt, 'yyyy.mm.dd HH:MM:SS');
- taskItem.timeFinished = date2str(now);
+ date2str = @(dt) char(dt, 'yyyy.MM.dd HH:mm:ss');
+ taskItem.timeFinished = date2str(datetime('now'));
- elapsedDuration = datetime(now, 'ConvertFrom', 'datenum') - taskItem.timeStarted;
- taskItem.elapsedTime = datestr(elapsedDuration, 'HH:MM:SS');
+ elapsedDuration = datetime('now') - taskItem.timeStarted;
+ taskItem.elapsedTime = char(elapsedDuration, 'hh:mm:ss');
obj.addTaskToHistory(taskItem)
end
@@ -730,7 +730,7 @@ function removeTask(obj, taskIdx, tableType)
newTask.status = 'Uninitialized';
newTask.numOut = numOut;
newTask.args = args;
- newTask.timeCreated = datestr(now, 'yyyy.mm.dd HH:MM:SS');
+ newTask.timeCreated = char(datetime('now'), 'yyyy.MM.dd HH:mm:ss');
newTask.timeStarted = '';
newTask.elapsedTime = '';
newTask.timeFinished = '';
diff --git a/code/datatypes/+nansen/+stack/+metadata/StackMetadata.m b/code/datatypes/+nansen/+stack/+metadata/StackMetadata.m
index 60474ac59..4a5e95f7f 100644
--- a/code/datatypes/+nansen/+stack/+metadata/StackMetadata.m
+++ b/code/datatypes/+nansen/+stack/+metadata/StackMetadata.m
@@ -174,8 +174,11 @@ function uiset(obj, src, evt)
function S = toStruct(obj)
S = toStruct@nansen.dataio.metadata.AbstractMetadata(obj);
- datestrFormat = 'YYYY_MM_DD_HH_MM_SS_sss';
- S.StartTime = datestr(S.StartTime, datestrFormat);
+ % datetime format spec (case-sensitive: MM=month, mm=minute,
+ % SSS=millisecond). The previous datestr format
+ % 'YYYY_MM_DD_HH_MM_SS_sss' was rejected by datestr itself.
+ dateFormat = 'yyyy_MM_dd_HH_mm_ss_SSS';
+ S.StartTime = char(S.StartTime, dateFormat);
end
function fromStruct(obj, S, propertyNames)
@@ -187,8 +190,8 @@ function fromStruct(obj, S, propertyNames)
if ~isfield(S, 'StartTime') || isempty(S.StartTime)
S.StartTime = datetime.empty;
else
- datestrFormat = 'YYYY_MM_DD_HH_MM_SS_sss';
- S.StartTime = datetime(S.StartTime, 'InputFormat', datestrFormat);
+ dateFormat = 'yyyy_MM_dd_HH_mm_ss_SSS';
+ S.StartTime = datetime(S.StartTime, 'InputFormat', dateFormat);
end
if isfield(S, 'Size') && isa(S.Size, 'cell')
diff --git a/code/datatypes/+nansen/+stack/ImageStackProcessor.m b/code/datatypes/+nansen/+stack/ImageStackProcessor.m
index a6d17e987..f34a1bf2f 100644
--- a/code/datatypes/+nansen/+stack/ImageStackProcessor.m
+++ b/code/datatypes/+nansen/+stack/ImageStackProcessor.m
@@ -1065,7 +1065,7 @@ function appendResults(obj, iResults)
function printSubTask(obj, varargin)
msg = sprintf(varargin{:});
- nowstr = datestr(now, 'HH:MM:ss');
+ nowstr = char(datetime('now'), 'HH:mm:ss');
fprintf('%s: %s: %s\n', nowstr, obj.MethodName, msg)
end
@@ -1207,7 +1207,7 @@ function displayImageStackSplittingInfo(obj)
methods (Static)
function printTask(varargin) % Todo: move to datamethod
msg = sprintf(varargin{:});
- nowstr = datestr(now, 'HH:MM:ss');
+ nowstr = char(datetime('now'), 'HH:mm:ss');
fprintf('%s: %s\n', nowstr, msg)
end
end