2018-05-11 22:10:44 fxss5201 阅读数 746
  • Java大数据培训学校全套教程-常用对象(21)

    Java大数据培训学校视频课程:"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学 校一次,完全可以找个java工程师的工作了。 本门课程为"java大数据培训学校全套教材"系列课程的第二十一篇,通过学习Array对象,等相关概念让大家对常用对象编程打下好的基础。

    4654 人正在学习 去看看 马克

前段时间做的一个项目中有一个倒计时,需要计算两个时间节点之间的差值,然后转化为时分秒,我用的是将两个时间节点传入new Date(),然后getTime()计算差值,代码大致如下:

// 仅是两个时间点是同一天的简单换算
function timeFormat(newTimeStr, oldTimeStr){
    var newTime = new Date(newTimeStr).getTime();
    var oldTime = new Date(oldTimeStr).getTime();
    var diffTime = newTime - oldTime;
    if(diffTime < 0){
        return "请确保参数顺序";
    }
    var hh = Math.floor(diffTime / 60 / 60 / 1000);
    hh = hh < 10 ? "0" + hh : hh;
    diffTime -= hh * 60 * 60 * 1000;
    var mm = Math.floor(diffTime / 60 / 1000);
    mm = mm < 10 ? "0" + mm : mm;
    diffTime -= mm * 60 * 1000;
    var ss = Math.floor(diffTime / 1000);
    return hh + ":" + mm + ":" + ss;
}
timeFormat("2018-05-11 15:09:09", "2018-05-11 12:10:10");

上面代码在Google浏览器正常,在安卓手机里面也正常,但是在iphone内一直出问题,我在网上查了查,大致意思是Safari不支持"2018-05-11 15:10:10"这种时间格式的new Date()参数,所以我写了下面这个例子来试试:
可点击此处查看,或者是直接用手机扫描下面的二维码:二维码

例子代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ios端关于Date()格式的兼容</title>
</head>

<body>
    <script>
        alert("new Date('2018-05-11 12:00:00').getMonth() :" + new Date("2018-05-11 12:00:00").getMonth());
        alert("new Date('2018/05/11 12:00:00').getMonth() :" + new Date("2018/05/11 12:00:00").getMonth());
        var time = '2018-05-11 12:00:00';
        var arr = time.split(/[- : \/]/);
        var d = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]);
        alert("new Date(" + arr[0] + "," + (arr[1] - 1) + "," + arr[2] + "," + arr[3] + "," + arr[4] + "," + arr[5] + ") : " + d.getMonth());
    </script>
</body>

</html>

例子是为了试一下浏览器的new Date()对’2018-05-11 12:00:00’和’2018/05/11 12:00:00’时间格式的兼容性。

如果你用的是Safari,那么你应该会看到第一个的提示是:

new Date(‘2018-05-11 12:00:00’).getMonth() :NAN

说明其不兼容’2018-05-11 12:00:00’这种时间格式,但是我们为了兼容,所以我将上面的第一段代码更改为如下:

// 仅是两个时间点是同一天的简单换算
function timeFormat(newTimeStr, oldTimeStr){
    newTimeStr = newTimeStr.replace(/-/g, "/"); 
    oldTimeStr = oldTimeStr.replace(/-/g, "/");
    var newTime = new Date(newTimeStr).getTime();
    var oldTime = new Date(oldTimeStr).getTime();
    var diffTime = newTime - oldTime;
    if(diffTime < 0){
        return "请确保参数顺序";
    }
    var hh = Math.floor(diffTime / 60 / 60 / 1000);
    hh = hh < 10 ? "0" + hh : hh;
    diffTime -= hh * 60 * 60 * 1000;
    var mm = Math.floor(diffTime / 60 / 1000);
    mm = mm < 10 ? "0" + mm : mm;
    diffTime -= mm * 60 * 1000;
    var ss = Math.floor(diffTime / 1000);
    ss = ss < 10 ? "0" + ss : ss;
    return hh + ":" + mm + ":" + ss;
}
timeFormat("2018-05-11 15:09:09", "2018-05-11 12:10:10");

或者是直接将2018-05-11 15:09:09时间格式转换为2018/05/11 15:09:09 就可以兼容所有浏览器了。代码如下:

new Date('2018-05-11 12:00:00'.replace(/-/g, '/'))

如此就兼容所有的浏览器了。关于Date的详细信息可查看:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

2018-06-13 12:09:23 yingBi2014 阅读数 669
  • Java大数据培训学校全套教程-常用对象(21)

    Java大数据培训学校视频课程:"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学 校一次,完全可以找个java工程师的工作了。 本门课程为"java大数据培训学校全套教材"系列课程的第二十一篇,通过学习Array对象,等相关概念让大家对常用对象编程打下好的基础。

    4654 人正在学习 去看看 马克

1、标准时间也叫格林尼治时间,北京所在的东八区时间比标准时间快八个小时。
例如:标准时间为 2000年1月1日 00:00:00
对应的北京时间为2000年1月1日 08:00:00
2 、iOS系统中直接生成的时间都是格林尼治时间,比当前时间(北京时间)小八个小时。

通过Date.init()生成的时间为当前时区的时间所对应的格林尼治时间
通过UIDatePicker所选择的时间为当前时区的时间所对应的格林尼治时间

3、当将NSdate使用DateFormatter转换成字符串时,传入的是格林尼治时间的date,系统会自动转换成当前时区的date,再转换成字符串,转换后的字符串时间对应当前时区的时间,代码如下

//nowDate对应格林尼治时间的date
//dateStr对应当前时区的时间
let nowDate = Date.init()
let f = DateFormatter()
f.dateFormat = "yyyy年MM月dd日 HH:MM:ss"
let dateStr = f.string(from: nowDate)

4、使用NSTimeZone将格林尼治的date转换为当前时区的date

//将格林尼治时间转换为本时区时间
func changeDate(_ oldDate:Date) -> Date {
        let timeZone = NSTimeZone.system
        let seconds = timeZone.secondsFromGMT(for: oldDate)
        return oldDate.addingTimeInterval(TimeInterval(seconds))
}

5、在计算两个date的时间差时,发现一个奇怪的问题,发现UIDatePicker选择范围在86年8月到91年8月之间的日期时,返回的格林尼治时间跟当前时间相差9个小时,而不是8个小时。
如果打印datepicker返回的date,和转换后的字符串比较,就会发现这一时间范围差值为9小时,而不是八小时,
可以在datepicker的valuechanged响应方法里做转换,代码如下

//valuechanged响应方法
 @IBAction func changed(_ sender: UIDatePicker) {
        let date = sender.date

        let f = DateFormatter()
        f.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
        let dateStr = f.string(from: date)

        print("\n 格林尼治时间     \(date) \n 转换后当前时区时间\(dateStr)" )

    }

log输出如下:
 格林尼治时间     2016-06-13 03:52:32 +0000 
 转换后当前时区时间2016061311:52:32

 格林尼治时间     2015-06-13 03:52:32 +0000 
 转换后当前时区时间2015061311:52:32

 格林尼治时间     2014-06-13 03:52:32 +0000 
 转换后当前时区时间2014061311:52:32

这几组是正常的时间,看到转换前后相差8小时,下面把UIDatePicker拨动到86年到91年之间的一个时间范围,

 格林尼治时间     1993-06-13 03:52:32 +0000 
 转换后当前时区时间1993061311:52:32

 格林尼治时间     1992-06-13 03:52:32 +0000 
 转换后当前时区时间1992061311:52:32

 格林尼治时间     1991-06-13 02:52:32 +0000 
 转换后当前时区时间1991061311:52:32

 格林尼治时间     1990-06-13 02:52:32 +0000 
 转换后当前时区时间1990061311:52:32

可以看到93 92年还是相差8小时,但是91 90年就是相差9个小时。

这说明,在这一个范围内,格林尼治时间和当前时区时间错开了一个小时,
如果我们要计算两个date之间的时间间隔,就要先用第4条中的方法将这两个date转换成当前时区的date,再计算时间间隔,否则计算出的时间间隔就多出一个小时。

自己可以用在线计算时间间隔试下。
如图,92年的间隔正常,91年的间隔多了一个小时
92年的间隔正常

91年的间隔多了一个小时

2012-05-30 15:11:29 nijino_saki 阅读数 38
  • Java大数据培训学校全套教程-常用对象(21)

    Java大数据培训学校视频课程:"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学 校一次,完全可以找个java工程师的工作了。 本门课程为"java大数据培训学校全套教材"系列课程的第二十一篇,通过学习Array对象,等相关概念让大家对常用对象编程打下好的基础。

    4654 人正在学习 去看看 马克

有时程序需要计算两个日期的差值,比如就算相差的年份、月份或者日子的差。iOS中已为我们封装好了相应的方法。例如想计算date1date2年份的差,可以封装这样一个方法:

+ (int)calculateAgeFromDate:(NSDate *)date1 toDate:(NSDate *)date2 {
    NSCalendar *userCalendar = [NSCalendar currentCalendar];
    unsigned int unitFlags = NSYearCalendarUnit;
    NSDateComponents *components = [userCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
    int years = [components year];
    return years;
}

unitFlags是一个枚举值,可以根据需要按位或上月份和日子的枚举值,返回的years就是两日期年份的差。

另外还需要注意的是:返回的年份差的计算已经包括了月份和日子比较。也就是说系统的计算方法并不是单纯的年份数字相减,在这一点上iOS系统做得很好。

 

2019-12-24 10:29:48 xiaoxiaobaibaicai 阅读数 3
  • Java大数据培训学校全套教程-常用对象(21)

    Java大数据培训学校视频课程:"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学 校一次,完全可以找个java工程师的工作了。 本门课程为"java大数据培训学校全套教材"系列课程的第二十一篇,通过学习Array对象,等相关概念让大家对常用对象编程打下好的基础。

    4654 人正在学习 去看看 马克
//比较两个时间的时间差
+ (NSString *)compareTwoDate:(NSString *)begain end:(NSString *)end{
    // 1.将时间转换为date
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *date1 = [formatter dateFromString:begain];
    NSDate *date2 = [formatter dateFromString:end];
    // 2.创建日历
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit type = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    // 3.利用日历对象比较两个时间的差值
    NSDateComponents *cmps = [calendar components:type fromDate:date1 toDate:date2 options:0];
    // 4.结果
    if (cmps.second <= 0 && cmps.minute < 0) {
        return @"0";
    }
    //初始化
    NSString *dayStr = [NSString stringWithFormat:@"%ld",cmps.day];
    NSString *hourStr = [NSString stringWithFormat:@"%ld",cmps.hour];
    NSString *minuteStr = [NSString stringWithFormat:@"%ld",cmps.minute];
    NSString *secondStr = [NSString stringWithFormat:@"%ld",cmps.second];
    if (cmps.day < 10) {
        dayStr = [NSString stringWithFormat:@"0%ld",cmps.day];
    }
    if (cmps.hour < 10) {
        hourStr = [NSString stringWithFormat:@"0%ld",cmps.hour];
    }
    if (cmps.minute < 10) {
        minuteStr = [NSString stringWithFormat:@"0%ld",cmps.minute];
    }
    if (cmps.second < 10) {
        secondStr = [NSString stringWithFormat:@"0%ld",cmps.second];
    }
    return [NSString stringWithFormat:@"%@:%@:%@:%@",dayStr,hourStr,minuteStr,secondStr];
}

我这里做了判断,如果开始时间大于结束时间,则返回字符串“0”;当天时分秒差值小于10时,前面补0显示

2015-09-01 17:27:16 qin_xiaogang 阅读数 267
  • Java大数据培训学校全套教程-常用对象(21)

    Java大数据培训学校视频课程:"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学 校一次,完全可以找个java工程师的工作了。 本门课程为"java大数据培训学校全套教材"系列课程的第二十一篇,通过学习Array对象,等相关概念让大家对常用对象编程打下好的基础。

    4654 人正在学习 去看看 马克

- (NSString *) returnUploadTime:(NSString *)timeStr

{

    //传入日期格式 2015-01-01

    

    NSDateFormatter *date=[[NSDateFormatter alloc] init];

    [date setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSDate *d=[date dateFromString:timeStr];

    

    NSTimeInterval late=[d timeIntervalSince1970]*1;

    

    

    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];

    NSTimeInterval now=[dat timeIntervalSince1970]*1;

    NSString *timeString;

    

    NSInteger cha=now-late;

    if (cha/3600.0<1) {

        timeString = [NSString stringWithFormat:@"%ld", cha/60];

//        timeString = [timeString substringToIndex:timeString.length-7];

        timeString=[NSString stringWithFormat:@"%@分钟", timeString];

        

    }

    if (cha/3600.0>1&&cha/86400.0<1) {

        timeString = [NSString stringWithFormat:@"%ld", cha/3600];

//        timeString = [timeString substringToIndex:timeString.length-7];

        timeString=[NSString stringWithFormat:@"%@小时%ld分钟", timeString,(cha%3600)/60];

        

//        NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];

//        [dateformatter setDateFormat:@"HH:mm"];

//        timeString = [NSString stringWithFormat:@"今天 %@",[dateformatter stringFromDate:d]];

    }

    if (cha/86400.0>1)

    {

        timeString = [NSString stringWithFormat:@"%ld", cha/86400];

//        timeString = [timeString substringToIndex:timeString.length-7];

        timeString=[NSString stringWithFormat:@"%@天%ld小时%ld分钟", timeString,(cha%86400)/3600,(cha%86400)%3600/60];

        

//        NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];

//        [dateformatter setDateFormat:@"YY-MM-dd HH:mm"];

//        timeString = [NSString stringWithFormat:@"%@",[dateformatter stringFromDate:d]];

    }

    return timeString;

}

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