转换date例如Jun 05 2016 08:00:00至dd / mm / yyyy hh:mm:ss

得到了诸如题目标题中的input。 试图找出如何将其转换成英国date和时间用于计算。

我已经看过谷歌上的一些方法,如使用文本到列,但我不认为这是我正在寻找…

谢谢!

编辑:月总是在缩写格式。
编辑2:我应该提到,我在英国,似乎并没有自动转换美国的date。
编辑3:数据:

Jun 05 2016 08:00:00 to dd / mm / yyyy hh:mm:ss

假设你的源date是一个string,并在单元格D10中,你需要做的第一件事就是将它转换为Exceldate时间序列。 在“Exceldate时间”序列中,有几点需要注意。

  • 数字的整数部分表示自1900年1月1日以来在windows中的天数,我认为1904年在mac上
  • 数字的小数部分表示时间的一小部分。 0.5代表中午。 VBA的有效Excel时间是00:00到23:59:59。 24:00不是一个有效的时间,虽然它会使用一些Excel的公式

所以为了把你的string转换成一个Exceldate序列,我们需要翻译这些组件并把它们转储到DATE()函数中。 date函数由三个参数组成:

 DATE(year,month,day) 

相当直接,除了这些值需要数字。 我们为什么不开始把你的信息从最大的单位拉到最小的单位。

谢天谢地,你的琴弦长度一致。 您的单个数字为0,因此它们将占用两位数的相同空间。 所以这个方法会一直工作到9999年,但是我不认为我们现在太担心了。

为了拉一年,我们看看你的string在哪里,它是多久。 所以通过简单的计算,我们知道它从第8个字符位置开始,它的长度为4个字符。 我们使用这个信息与MID()函数

 =MID(D10,8,4) 

为了拉动月份,我们需要把它从一个缩写转换成一个数字,这会变得更复杂一些。 有几种方法可以做到这一点。 你可以去做一个长期的IF声明,结束11个月的重复。 相反,我决定使用MATCH()函数并在其内部构build一个月份缩写的数组。 MATCH()函数将返回您在search列表中search的数字/位置。 所以只要按时间顺序input月份,他们的位置就会和他们的数值相对应。 因此,我们的公式将如下所示:

 MATCH(LEFT(D10,3),{"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"},0) 

LEFT()函数用于从string中提取月份缩写。 最后的0表示匹配以查找完全匹配。 重要的是要注意,这种匹配方法不区分大小写。

现在为了得到一天,我们雇用了我们为拉动年度而做的同样的校长,我们结束了:

 =MID(D10,5,2) 

现在我们可以用Year Month和Day中的每个公式replaceDATE()函数,我们将得到Exceldate序列的date部分。 公式应该如下所示:

 =DATE(MID(D10,8,4),MATCH(LEFT(D10,3),{"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"},0),MID(D10,5,2)) 

现在你需要确定你的时间部分,或者找出小数部分。 为了做到这一点,我首先build议尝试TIMEVALUE()函数。 由于时间格式往往比date格式更加标准化,因此有更高的可能性为您工作。 为了使用TIMEVALUE(),时间部分需要从string中剥离。 这很容易用RIGHT()函数完成,如下所示:

 =RIGHT(D10,8) 

这将给你只是时间部分,然后可以被replace成TIMEVALUE()函数,看起来像:

 =TIMEVALUE(RIGHT(D10,8)) 

如果TIMEVALUE()函数不适用于您,那么您将需要去除小时分钟和秒数,并将其结果转储到TIME()函数中。 按照与DATE()函数的年份和date相同的方式来执行此操作。 只需更新你的人物数量。 TIME()使用三个参数,如下所示:

 TIME(HOUR,MINUTES,SECONDS) 

现在你已经计算出你的date部分和你的时间部分,所有你需要做的就是把它们加在一起,以获得所有的信息到一个单元格。 结果公式如下所示:

 =DATE(MID(D10,8,4),MATCH(LEFT(D10,3),{"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"},0),MID(D10,5,2))+TIMEVALUE(RIGHT(D10,8)) 

在哪里你发条放置这个公式,记得把单元格上的格式改成自定义date。 input单元格自定义格式,如下图所示。

自定义格式

如果您有列转换的date时间列表,只需将您的公式和格式化单元格尽可能地放下即可。

概念validation

概念验证

使用的公式

有关上述公式中使用的函数的更多信息,请按照以下链接进行操作:

  • 比赛
  • date
  • TIMEVALUE
  • 剩下

{ “JAN”, “FEB”, “MAR”, “APR”, “可能”, “JUN”, “JUL”, “AUG”, “SEP”, “OCT”, “NOV”, “DEC”}

{}用于构build自定义列表或静态数组。

如果您不想在VBA中编写macros,如果格式如您指定的那样,则单元格公式将起作用:

我假设数据在单元格B3中

 =MID(B3,5,2) & "/" & IF(LEFT(B3,3)="Jan","01",IF(LEFT(B3,3)="Feb","02",IF(LEFT(B3,3)="Mar","03",IF(LEFT(B3,3)="Apr","04",IF(LEFT(B3,3)="May","05",IF(LEFT(B3,3)="Jun","06",IF(LEFT(B3,3)="Jul","07",IF(LEFT(B3,3)="Aug","08",IF(LEFT(B3,3)="Sep","09",IF(LEFT(B3,3)="Oct","10",IF(LEFT(B3,3)="Nov","11","12"))))))))))) & "/" & RIGHT(B3,13) 

DATEVALUE函数在date和年份之间需要一个逗号; REPLACE函数可以将其添加进来。TIMEVALUE函数应该能够在不修改的情况下读取该时间。

 =DATEVALUE(REPLACE(LEFT(A1, 11), 7, 0, ","))+TIMEVALUE(RIGHT(A1, 8)) 

请注意,A1中的原稿是左alignment的; 这表示一个文本值。 B1中的转换date/时间是右alignment的; 这表示一个真实的date/时间值。

B列格式为dd/mm/yyyy hh:mm:ssGeneral它会显示为42526.33333

datevalue_timevalue2