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 @@ -code issuescode issues17351735 \ No newline at end of file +code issuescode issues17061706 \ 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