【问题标题】:Converting Timestamp to Date Excel将时间戳转换为日期 Excel
【发布时间】:2016-12-18 22:00:06
【问题描述】:

我有一个时间戳列,格式为“2016 年 8 月 1 日 - 13:46”。为了像日期一样格式化,因为我不需要时间戳,所以我去掉了空格和时间戳,

(SUBSTITUTE(LEFT(A2,LEN(A2)-8)," ",""))

然后做

DATE(YEAR(RIGHT(C2,4)),MONTH(VLOOKUP(LEFT(C2,3),$H$2:$I$13,2,FALSE)),DAY(IF(ISNUMBER(MID(C2,4,1)),MID(C2,4,2),MID(C2,5,2))))

我在其中获取正确的 4 位数字作为年份,对月份字符串进行 vlookup,然后获取当天的中间数字(IF 语句是因为有时月份会超过 4 个字符)。我的结果是“1/12/05”无法弄清楚我做错了什么,非常感谢任何帮助!通常会在 R 中使用 strftime,但数据集很小:)

谢谢

【问题讨论】:

  • = DateValue( Left( A2, 12 ) )
  • 我的错.. 日期在年份之前需要一个逗号"Aug 01, 2016,但这有效= TEXT( SUBSTITUTE( SUBSTITUTE( A2, " ", ", " ), ", -, ", " " ), "m/d/y" )

标签: excel date


【解决方案1】:

请尝试:

=DATE(MID(A2,FIND(" -",A2)-5,5),VLOOKUP(LEFT(A2,3),$H$2:$I$13,2,0),MID(A2,FIND(" -",A2)-7,2))  

可能有一个更短的版本,但我很好奇你没有显示的不同格式(以及 H2:I13 中的内容),我试图“尊重”你的方法。

更短的版本(不需要 VLOOKUP):

=DATEVALUE(MID(A2,FIND(" -",A2)-7,2)&"-"&LEFT(A2,3)&"-"&MID(A2,FIND("-",A2)-5,5))  

上面的较长版本使用查找表 (H2:I13),其中将日期戳的前三个字符转换为代表相关月份的数字。这避免了月份指示中长度不一致可能导致的复杂情况。

年份和日期是根据它们与空格/破折号对的参考点的关系来挑选的。相对于此,年份将更快开始四个字符(并且长度为四个)。

空格/破折号对(仅破折号作为参考点就足够了)从示例的第十二个字符开始,位于:

FIND(" –",A2)  

从此结果(即12)中减去5 以倒计时到年初。 (其实是年初之前的空间,不过没关系)。从年份前面的空格来看,年份是五个字符长,这是从A2 中提取的字符串的长度:

MID(A2,FIND(" -",A2)-5,5)  

以类似的方式提取日期(例如01),然后提取三个部分(年份、VLOOKUP 结果和日期)并作为参数输入=DATE 函数。

较短的版本无需concatenating查找表,在年和日的中间(提取方式与长版类似),日期戳的前三个字符来自:

LEFT(A2,3)

两边都被-包围。

(参见LEFT,它实际上是MID 在其他地方使用的稍微简化的形式)。

结果是一个字符串,但采用 Excel 可识别的格式,并且方便的函数 =DATEVALUE 可以将其转换为日期/时间值。

如果数据更加一致(即月份总是三个字母),这会容易得多。

【讨论】:

  • ah- 查找中的值是月份的前三个字母,以及对应的月份整数。这样可行!谢谢!!
【解决方案2】:

(编辑:此答案可能不适用于 Excel 2016 之前的版本,正如下面 cmets 中@pnuts 所指出的那样。)

@pnuts 给出的解决方案效果很好,但这里可以考虑一个更短、更简单的解决方案:

=VALUE(SUBSTITUTE(LEFT(A2,11)," ",", ",2))

这需要LEFT 11 个字符(Aug 01 2016),然后使用SUBSTITUTE 将逗号添加到第二个空格(第二个" " 变为", ")。然后 Excel 足够聪明,可以在应用 VALUE 时将此解释为日期。

现在,如果由于月份名称、一位数字日期值或两位数字年份值(@pnuts 的解决方案将失败的极端情况)不同长度的月份名称、一位数字的日期值或两位数字的年份值,您不能保证它正好是 11 个字符,那么您可以修改如下:

=VALUE(SUBSTITUTE(LEFT(A2,SEARCH("-",A2)-2)," ",", ",2))

这里唯一的区别是我们使用SEARCH("-",A2) 来查找连字符出现的位置并从该位置备份两个字符,而不是使用硬编码的11

使用FIND 代替SEARCH 也可以。这两者的区别在于FIND 区分大小写,而SEARCH 不区分大小写。在公式中使用DATEVALUE 而不仅仅是VALUE 也可以,但后者会节省一些字符。

【讨论】:

  • 我测试了几种变体,它们对我来说效果很好。您认为这可能是版本问题吗?我正在使用 Excel 2016。也许 Excel 的日期字符串识别变得更智能了。
  • 它显示了相应的整数日期,我可以随意格式化。
  • 感谢您检查公式。我将编辑我的答案以包含一个注释,它似乎不适用于旧版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
相关资源
最近更新 更多