我希望记录我完成某个编程问题所需的时间数据。我正在使用谷歌电子表格来保持我的表现。我面临的问题是,我希望单元格接受结果为 mm:ss,但谷歌表格正在将其转换为 12-hr 格式,即 hh:mm:ss,我怎样才能阻止这种情况发生?
例如:- 1:30 转换为 1:30:00 AM。
更新:
我找到了一种新的方法来做到这一点,它确实给了你你想要的价值:
=TEXT(TIME(,text(A1,"HH"),text(A1,right(A1,2))),"HH:MM:SS")
参见变形图片:
之前的回答-没有完全解决:
因此,您想要做的是使用单个正则表达式替换函数,您可以成功地将其转换为持续时间值:
=REGEXREPLACE(text(A2,"hh:mm:ss"),"(\d+):(\d+):(\d+)","$3:$1:$2")
使用
regexreplace
我基本上对每个片段进行分组并重新排序,以便将小时视为分钟,将分钟视为秒。
有关上下文和概念证明,这里有一个屏幕截图:
在单元格 A2 中,您可以看到原始的
1:30
,如果您查看公式栏,您可以看到 google 仍在将其格式化为 12 小时时间。
为了重申上述事实,在
BEFORE
右侧的单元格中,您会看到我将原始值格式化为文本,以表明它确实按小时、分钟、秒的顺序解释 hh:mm:ss
的这些值
C2 有变换它的公式
最后 D2 指向转换后的公式,以证明它实际上现在将其解释为
hh:mm:ss
但分钟和秒的顺序现在位于正确的位置
这是我解决问题的方法:
0 hours
连接到您的字符串。Minute (01):Second (01)
>> 应用这个过程如下图所示:
您可以将步骤 2 和 3 与以下函数结合起来:
=TIMEVALUE(CONCAT("0:",A2))
然后根据需要重新格式化。
专家方法:
通过为此创建自定义函数进入下一个级别。从this SO answer中汲取灵感,您可以创建以下自定义函数:
/**
* Converts a string to a timestamp with specific formatting. NOTE:,
* user will need to format date on spreadsheet for correct formatting.
*
*@param {string} string string representing minutes and seconds (Ex "1:30")
*@param {string} format string representing timestamp format (Ex. "mm:ss")
@return timestamp with specific formatting
*
*@customfunction
*/
function getTimestamp(string,format) {
// Start with the turn of the 20th century...
var baseDate = "1900-01-01 "
// Create a timestamp using the input string
if (format=="mm:ss"){
var newString = baseDate + "00:"+string
}
if (format=="HH:mm:ss"){
var newString = baseDate + string
}
if (!newString){
return "ERROR"
}
// Create your date and send off!
var myDate = new Date(newString)
return myDate
}
使用此功能如下:
=getTimestamp(A2,"mm:ss")
如果有人在2022年仍在寻找答案,解决方案很简单。
转至格式 > 数字 > 自定义数字格式,然后输入
[mm]:ss
[mm]
周围的括号告诉谷歌表格将值视为持续时间,而不是时间。
如果您希望单元格仅显示一位数字的分钟(例如
"1:30"
而不是 "01:30"
),请使用 [m]:ss
。希望这对某人有帮助。