matlab - 具有空字符串连接的 Datenum 行为
问题描述
我注意到datenum
使用 MATLAB R2017a 及更高版本的函数有奇怪的行为:
如果您尝试运行:
date = datenum([""],'yyyymmdd');
我们得到一个警告:
警告:不支持将 DATENUM 与空日期字符向量或空字符串一起使用。结果可能会在未来的版本中发生变化。
date =
0x1 empty double column vector
但是现在如果我们运行:
date = datenum(["","20181012"],'yyyymmdd')
我们获得:
date = 2x1:
737426 % which corresponds to 20190101
737345
所以这两次我们都给 一个空字符串datenum
,但是如果数组包含多个字符串,结果是不同的。为什么在存在其他字符串时可以解析空字符串,即使是另一个空字符串,但不能单独解析?
解决方案
这可能是一个错误。
函数的开头datenum
包含
arg1 = stringToLegacyText(arg1);
arg1
的第一个输入在哪里datenum
。该stringToLegacyText
函数根据其代码执行以下操作:
S = STRINGTOLEGACYTEXT(S) converts the string array S to a char row vector, if S is a scalar, or to a cellstr, if S is not a scalar.
那是,
>> stringToLegacyText([""])
ans =
0×0 empty char array
>> stringToLegacyText(["" ""])
ans =
1×2 cell array
{0×0 char} {0×0 char}
>> stringToLegacyText(["" "20181012"])
ans =
1×2 cell array
{0×0 char} {'20181012'}
后来有这个测试:
if isdatestr && isempty(arg1) n = zeros(0,1); warning(message('MATLAB:datenum:EmptyDate')); return; end
arg1
如果为空,则会产生您提到的警告。上述第一种情况 ( [""]
) 的测试结果为真,但对第二种 ( ["" ""]
) 或第三种 ( )则不然["" "20181012"]
。所以对于第二种或第三种情况,函数继续
n = dtstr2dtnummx(arg1,matlab.internal.datetime.cnv2icudf(arg2))
该dtstr2dtnummx
功能未记录:
>> which dtstr2dtnummx built-in (undocumented)
但它需要一个 char 向量元胞数组作为第一个参数,并以某种方式给出737426
空 char 向量:
>> dtstr2dtnummx({''}, matlab.internal.datetime.cnv2icudf(arg2))
ans =
737426
>> dtstr2dtnummx({'' ''}, matlab.internal.datetime.cnv2icudf(arg2))
ans =
737426
737426
>> dtstr2dtnummx({'' '20181012'}, matlab.internal.datetime.cnv2icudf(arg2))
ans =
737426
737345
推荐阅读
- javascript - 每次运行函数时如何将对象添加到数组中?
- xaml - 如何根据 Xamarin.Forms xaml 中的本地化语言显示选取器项目
- python - 熊猫打印 CSV 文件的问题
- ios - 获取iOS系统默认主题颜色的任何方式
- javascript - 在 QML 中使用 ParseServer 后端 JS 库
- azure-data-explorer - 当我们停止(暂停) Kusto 和 ADX 集群时,我们是否为存储付费?
- python - argpartition 表现出意外行为
- linux - standard_init_linux.go:207: exec 用户进程导致权限被拒绝
- haxe - Haxe中主类的命名规则是什么?
- php - 将字符串乘以数字