2020-03-08 15:49:23 qq_34576748 阅读数 18

在IOS的移动端,使用 new Date() 将 '2020-12-12’格式的字符串转换为GMT+0800 (中国标准时间)是有问题的,会转换失败

解决方法

把 ‘2020-12-12’ 中间的 ‘-’ 替换为 ‘/’ ,就可以转换了

var date = '2020-12-12';
date.replace(/-/g, '/'); // => '2020/12/12'
new Date( date ); // Sat Dec 12 2020 08:00:00 GMT+0800 (中国标准时间) √
2019-01-04 12:55:36 dt1991524 阅读数 795

   我们的项目中有个功能是根据昨天到当前时间去查找记录,可是就在圣诞节过后,出现了问题,查找记录查找不到了?最后发现时间区间是:2019-12-26 3:00:00-----2019-12-27 23:15:45,怎么回事呢?只有年份不对,年份应该是2018年啊!代码没有问题啊!找了好久,**最后发现时间格式设置不对!**  好大的坑!

获取当前时间代码:

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formattersetDateStyle:NSDateFormatterMediumStyle];
    [formattersetTimeStyle:NSDateFormatterShortStyle];
    [formattersetDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString*DateTime = [formatterstringFromDate:date];
    NSLog(@"当前时间:%@",DateTime);


日期的格式一定要写正确,正确格式如下: yyyy-MM-dd HH:mm:ss
下面总结下不同格式会出现的不同错误:
1. 格式:`YYYY-MM-dd HH:mm:ss`

[format setDateFormat:@"yyyy-MM-dd"];输出2018-12-27

[format setDateFormat:@"YYYY-MM-dd"];输出2019-12-27


格式是YYYY-MM-dd会出现年份不正确!这是因为YYYY 是以周为单位计算的,yyyy才是标注的年份。


2. 格式:yyyy-mm-dd HH:mm:ss
 

[format setDateFormat:@"yyyy-MM-dd"];输出2018-12-27

[format setDateFormat:@"yyyy-mm-dd"];输出2018-42-27


3. 格式:yyyy-MM-DD HH:mm:ss
 

[format setDateFormat:@"yyyy-MM-dd"];输出2018-12-27

[format setDateFormat:@"yyyy-MM-DD"];输出2019-42-27


4. 格式:yyyy-MM-dd HH:MM:ss


[format setDateFormat:@"HH:mm:ss"]; 输出11:58:38

[format setDateFormat:@"HH:MM:ss"]; 输出11:01:38

字符说明:

yyyy:以四位数字格式显示年份。

M: 将月份显示为不带前导零的数字(如一月表示为 1)。

MM: 将月份显示为带前导零的数字(例如 2019-01)。

MMM:将月份显示为缩写形式(例如 Jan)。

MMMM:将月份显示为完整月份名(例如 January)。

d:将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %d。

dd: 将日显示为带前导零的数字(如 01)。

H:使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H。

HH: 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。

h:使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h。

hh:使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。

m:将分钟显示为不带前导零的数字(例如 12:1:15)。

mm:将分钟显示为带前导零的数字(例如 12:01:15)。

s:将秒显示为不带前导零的数字(例如 12:15:5)。

ss:将秒显示为带前导零的数字(例如 12:15:05)。

2013-05-23 17:28:20 theonezh 阅读数 2731

 各种时间字符说明

         (:)

         时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由您的应用程序的当前区域性值确定。

         (/)

         日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由您的应用程序的当前区域性确定。

         (%)

         用于表明不论尾随什么字母,随后字符都应该以单字母格式读取。也用于表明单字母格式应以用户定义格式读取。有关更多详细信息,请参见下面的内容。

         d

         将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %d

         dd

         将日显示为带前导零的数字(如 01)。

         EEE

         将日显示为缩写形式(例如 Sun)。

         EEEE

         将日显示为全名(例如 Sunday)。

         M

         将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,请使用%M

         MM

         将月份显示为带前导零的数字(例如 01/12/01)。

         MMM

         将月份显示为缩写形式(例如 Jan)。

         MMMM

         将月份显示为完整月份名(例如 January)。

         gg

         显示时代/纪元字符串(例如 A.D.

         h

         使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h

         hh

         使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。

         H

         使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H

         HH

         使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。

         m

         将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用%m

         mm

         将分钟显示为带前导零的数字(例如 12:01:15)。

         s

         将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用%s

         ss

         将秒显示为带前导零的数字(例如 12:15:05)。

         f

         显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f

         t

         使用 12 小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M 之间的任一小时显示大写的 P。如果这是用户定义的数字格式中的唯一字符,请使用 %t

         tt

         对于使用 12 小时制的区域设置,对中午之前任一小时显示大写的 AM,对中午到 11:59 P.M 之间的任一小时显示大写的 PM

         对于使用 24 小时制的区域设置,不显示任何字符。

         y

         将年份 (0-9显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用 %y

         yy

         以带前导零的两位数字格式显示年份(如果适用)。

         yyy

         以四位数字格式显示年份。

         yyyy

         以四位数字格式显示年份。

         z

         显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用 %z

         zz

         显示带前导零的时区偏移量(例如 -08

         zzz

         显示完整的时区偏移量(例如 -08:00

         格式显示

         M/d/yy

         12/7/58

         d-MMM

         7-Dec

         d-MMMM-yy

         7-December-58

         d MMMM

         7 December

         MMMM yy

         December 58

         hh:mm tt

         08:50 PM

         h:mm:ss t

         8:50:35 P

         H:mm

         20:50

         H:mm:ss

         20:50:35

         M/d/yyyy H:mm

         12/7/1958 20:50

差不多够用了!

格式化时间格式

G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K:时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
2019-10-15 15:50:54 zhwangchao 阅读数 211

填坑

       ios下后台返回的类似   ‘2019-10-01 12:00:00’  由 new Date(‘2019-10-01 12:00:00’).getTime()   

      导致结果就是时间插件全部是NaN,以及下面的Boolean类型值控制出错

       

new Date('2019-10-01 12:00:00').getTime(); //  转出结果为NaN

       安卓下正常

       

new Date('2019-10-01 12:00:00').getTime(); //  转出结果为1569902400000

解决方案

        IOS下转化时间戳 为NaN格式,这个是因为在IOS系统下不识别 ‘-’ 需要 把 ‘-’ 转化成 ‘/’   

        如下:IOS下处理正常,安卓也正常

new Date('2019-10-01 12:00:00'.replace(/-/g,'/')).getTime(); // IOS下正常 转出结果为1569902400000
2016-09-02 14:05:56 CornerAndCorner 阅读数 389

G:公元年代

yy:年的后两位

yyyy:完整的年

MM:月份,显示1-12

MMM:月份,显示英文简写

MMMM:月份,显示英文全称

dd:天,两位显示

d:天,显示一位数

EEE:英文简写星期

EEEE:英文全称星期

aa:上下午,显示AM/PM

HH:24小时制

hh:12小时制 或者K也是12小时制

m:显示分钟一位

mm:显示分钟两位

s:显示秒一位

ss:显示秒两位

S:显示毫秒


iOS时间格式说明

阅读数 1071

没有更多推荐了,返回首页