将NSString(例如:“2300”)转换为NSDate(iOS)

时间:2016-08-03 10:11:33

标签: ios objective-c nsdate nsdateformatter

我正在尝试将NSString像这样的“2300”转换为NSDate格式。 (注意:23岁后没有结肠)。

我从外部Web服务获取字符串。我需要以12小时的格式在我的应用中显示这段时间。

谢谢你:)

2 个答案:

答案 0 :(得分:1)

我在这里添加了三种类型,你需要在哪种类型中选择

输入-1

library("data.table")
library("sqldf")

Data <- data.table(
  Fnr      = c(22516, 22516, 22516, 45459, 45459),
  Vernr    = c(1,1,1,1,2),
  Startdat = c("2010-01-01", "2010-01-01", "2012-01-01", 
               "2013-04-01", "2013-04-01"),
  Endat    = c("2010-12-31", "2010-12-31", "2012-05-19", 
               "2014-03-31", "2014-03-31"),
  Fromdat  = c("2010-02-21", "2010-08-16", NA, "2013-08-31", "2014-01-02"),
  Tomdat   = c("2010-05-16", "2010-09-11", NA, "2013-10-27", "2014-02-13")
)

tmp.eval <- "list(Fnr, Vernr, Startdat, Endat)"

dt_tmp <- Data[, nobs_id := order(Fromdat), 
               by = eval(parse(text = tmp.eval))]

dt_tmp <- dt_tmp[, c("Fromdat", "Tomdat") := list(as.Date(Fromdat), 
                                                  as.Date(Tomdat))]

dt_tmp <- dcast(dt_tmp, Fnr + Vernr + ... ~ nobs_id,
                value.var = c("Fromdat", "Tomdat"))

dt.colnames <- data.table(colnames(dt_tmp))
dt.col1 <- dt.colnames[substr(V1,1,3) == "Fro"][, c("nobs_id", "Fromdat") := 
                                                list(order(V1),V1)]
dt.col2 <- dt.colnames[substr(V1,1,3) == "Tom"][, c("nobs_id", "Tomdat") := 
                                                list(order(V1),V1)]
dt.set <- merge(dt.col1[,V1 := NULL], dt.col2[,V1 := NULL],
                by = "nobs_id")
dt.set <- dt.set[, diff_col := paste(Tomdat,Fromdat, sep = "-")]
dt.set <- dt.set[, diff_col := paste(diff_col, " diff_",nobs_id, sep = "")]
dt.set <- dt.set[, diffvar_col := paste("as.numeric(diff_",nobs_id,")",
                                        sep = "")]

str.diff <- paste(dt.set$diff_col, collapse = ",")
str.diffvar <- paste(dt.set$diffvar_col, collapse = ",") 
str.diffvar <- paste("sum(", str.diffvar, ", na.rm = TRUE)")

dt_tmp <- sqldf(sprintf("SELECT *, %s FROM dt_tmp",
                         str.diff)
                )

dt_tmp <- setDT(dt_tmp)[Startdat <= Endat, 
                        corr_days := eval(parse (text = str.diffvar)),       
                        by = list(Fnr, Vernr, Startdat, Endat)]

输入-2

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HHmm"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setLocale:[NSLocale systemLocale]];
 NSDate *date = [formatter dateFromString:@"2300"];
  [formatter setDateFormat:@"hh:mm"];
NSString *finalDate = [formatter stringFromDate:date];
NSLog(@"finalDate==%@",finalDate);

键入-3

NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"HHmm"];
[formatter1 setTimeZone:[NSTimeZone systemTimeZone]];
[formatter1 setLocale:[NSLocale systemLocale]];
NSDate *date1 = [formatter1 dateFromString:@"2300"];
[formatter1 setDateFormat:@"hhmm"];
NSString *finalDate1 = [formatter1 stringFromDate:date1];
NSLog(@"finalDate1==%@",finalDate1);

你得到像

这样的输出

enter image description here

答案 1 :(得分:0)

如果我理解你的问题是正确的,2300实际上是23:00,即晚上11点。 所以首先你需要从字符串中获取日期,我只能想到你得到的数据state.mergeDeep({ 'cmsData': data })

$text = "Name: 'John',

Surname: 'Doe',

Age: 35";

$search = "/Surname:\s+'(.*?)',/is";
$replace = 'Surname: \'Smith\',';
$content = preg_replace($search, $replace, $text);
echo $content;

根据abizern的建议添加系统区域设置和时区。 这也不会假设日期字符串有4位数