Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何将十进制时间转换为NSDate?_Objective C_Swift_Datetime_Nsdate_Date Arithmetic - Fatal编程技术网

Objective c 如何将十进制时间转换为NSDate?

Objective c 如何将十进制时间转换为NSDate?,objective-c,swift,datetime,nsdate,date-arithmetic,Objective C,Swift,Datetime,Nsdate,Date Arithmetic,我有用双倍表示的时间。例如: 8:00am is 8.00 1:30pm is 13.50 6:15pm is 18.25 11:20pm is 23.333 如何将双打转换为今天的NSDate?使用以下答案获得今天的午夜: 一旦你有了午夜的时间,我们将使用addTimeInterval从你的十进制值中加上秒数 int hoursToAdd = (int)timeDecimal; int minutesToAdd = timeDecimal - hoursToAdd; int seconds

我有用双倍表示的时间。例如:

8:00am is 8.00
1:30pm is 13.50
6:15pm is 18.25
11:20pm is 23.333

如何将双打转换为今天的NSDate?

使用以下答案获得今天的午夜:

一旦你有了午夜的时间,我们将使用addTimeInterval从你的十进制值中加上秒数

int hoursToAdd = (int)timeDecimal;
int minutesToAdd = timeDecimal - hoursToAdd; 
int secondsFromHours = hoursToAdd*60*60;
int secondsFromMinutes = minutesToAdd*60;
int totalSeconds = secondsFromHours + secondsFromMinutes;
NSDate *newDate = [date addTimeInterval:totalSeconds];

你应该做这个把戏

使用以下答案获得今天的午夜:

let input = 13.50

let hour = Int(input)
let minute = Int((input - Double(Int(input))) * 60)

let resultDate = NSCalendar.currentCalendar().dateBySettingHour(hour, minute: minute, second: 0, ofDate: NSDate(), options: nil)!
一旦你有了午夜的时间,我们将使用addTimeInterval从你的十进制值中加上秒数

int hoursToAdd = (int)timeDecimal;
int minutesToAdd = timeDecimal - hoursToAdd; 
int secondsFromHours = hoursToAdd*60*60;
int secondsFromMinutes = minutesToAdd*60;
int totalSeconds = secondsFromHours + secondsFromMinutes;
NSDate *newDate = [date addTimeInterval:totalSeconds];

你应该做这个把戏

从今天午夜开始,加上你的小时数:

let input = 13.50

let hour = Int(input)
let minute = Int((input - Double(Int(input))) * 60)

let resultDate = NSCalendar.currentCalendar().dateBySettingHour(hour, minute: minute, second: 0, ofDate: NSDate(), options: nil)!
func dateFromDecimalHours(hours: Double) -> NSDate {
    let midnight = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
    let date = midnight.dateByAddingTimeInterval(round(hours * 3600.0))
    return date
}
(大多数小数部分不能用双精度表示, 这就是时间间隔四舍五入为秒的原因。)

示例/测试用例:

let fmt = NSDateFormatter()
fmt.dateFormat = "dd/MM/yyyy hh:mm.ss a"

let d1 = dateFromDecimalHours(18.25)
println(fmt.stringFromDate(d1))    // 07/05/2015 06:15.00 pm

let d2 = dateFromDecimalHours(23.3333)
println(fmt.stringFromDate(d2))    // 07/05/2015 11:20.00 pm

let d3 = dateFromDecimalHours(1.0 + 23.0/60.0 + 45.0/3600.0)
println(fmt.stringFromDate(d3))    // 07/05/2015 01:23.45 am

从今天午夜开始,加上你的小时数:

func dateFromDecimalHours(hours: Double) -> NSDate {
    let midnight = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
    let date = midnight.dateByAddingTimeInterval(round(hours * 3600.0))
    return date
}
(大多数小数部分不能用双精度表示, 这就是时间间隔四舍五入为秒的原因。)

示例/测试用例:

let fmt = NSDateFormatter()
fmt.dateFormat = "dd/MM/yyyy hh:mm.ss a"

let d1 = dateFromDecimalHours(18.25)
println(fmt.stringFromDate(d1))    // 07/05/2015 06:15.00 pm

let d2 = dateFromDecimalHours(23.3333)
println(fmt.stringFromDate(d2))    // 07/05/2015 11:20.00 pm

let d3 = dateFromDecimalHours(1.0 + 23.0/60.0 + 45.0/3600.0)
println(fmt.stringFromDate(d3))    // 07/05/2015 01:23.45 am

听起来您应该使用
dateWithTimeInterval:sinceDate:
,根据小时数创建一个
NSTimeInterval
,然后让
sinceDate
今天。。。但你需要决定这意味着什么,在时区方面。请记住,如果您所在的时区遵守DST,那么a)今天可能不会出现午夜;b) 在午夜增加5个小时可能不会让你凌晨5点…使用NSDATE组件。当然,你必须做一些涉及60的除法,才能得到分钟数,但你可以处理它!听起来您应该使用
dateWithTimeInterval:sinceDate:
,根据小时数创建一个
NSTimeInterval
,然后让
sinceDate
今天。。。但你需要决定这意味着什么,在时区方面。请记住,如果您所在的时区遵守DST,那么a)今天可能不会出现午夜;b) 在午夜增加5个小时可能不会让你凌晨5点…使用NSDATE组件。当然,你必须做一些涉及60的除法,才能得到分钟数,但你可以处理它!