从时间服务器获取时间(linux) + Objective-C将获取的值转化为NSDate

转载自:http://blog.sina.com.cn/s/blog_468eb48e01010z3t.html

1、从通过socket获取的时间值为从1900-1-1 00:00:00时间到现在的一个间隔(整型)
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define IPPORT_TIMESERVER 37

int GetTimeFromServer(u_int64_t *lpdwTime)
{
*lpdwTime = 0;
int bReturn= 0;

int sSock = socket(AF_INET, SOCK_STREAM, 0);
if(0 < sSock)
{
struct sockaddr_in sin;

sin.sin_addr.s_addr = inet_addr("132.163.4.101");//时间服务器ip地址
sin.sin_family = AF_INET;
sin.sin_port = htons(IPPORT_TIMESERVER);
printf( "\n      ...Waiting Connection...\n");

if(0 == connect(sSock, (struct sockaddr *) &sin, sizeof(struct sockaddr_in)))
{
printf( "      ***Connected***\n");
int iResult, iRead;

for(iRead = 0; iRead < 4; iRead += iResult)
{
iResult = recv(sSock, (char*)lpdwTime + iRead, 4 - iRead, 0);
if(iResult < 1)
break;
}

if(4 == iRead)
{
*lpdwTime = ntohl(*lpdwTime);

bReturn = 1;
}else
printf( "      Error getting time!\n");
}else
printf( "      ***Connection Failed***\n");


close(sSock);
}

return bReturn;
}

int main(int argc,char *argv[])
{
u_int64_t dwTime = 0;
GetTimeFromServer(&dwTime);
printf("time : %llu\n",dwTime);
return 0;
}

2、将获取的整型转化为objective-c认识的当前的时间

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

    NSTimeZone *timeZone =  [NSTimeZone timeZoneWithAbbreviation:@"GMT"];  

    

    [formatter setTimeZone:timeZone];  

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

    

    NSTimeZone *localZone = [NSTimeZone localTimeZone];  

    

    NSDate *dateTime = [formatter dateFromString:@"1900-01-01 00:00:00"];      

    

    u_int64_t interval = 0

       GetTimeFromServer(&interval);

    

    NSDate *now = [NSDate dateWithTimeInterval:interval + [localZone secondsFromGMT]sinceDate:dateTime];

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Objective-C可以使用NSDate类来获取当前时间。你可以使用以下代码来获取当前时间时间戳: ```Objective-C NSDate *date = [NSDate date]; NSTimeInterval currentTimeInterval = [date timeIntervalSince1970]; ``` 其中,NSDate的date方法可以获取当前时间的NSDate对象,而timeIntervalSince1970方法可以返回该NSDate对象与1970年1月1日的时间间隔,以秒为单位。所以,currentTimeInterval就是当前时间时间戳(以秒为单位)。 如果你需要将时间戳转换为毫秒单位,你可以使用以下代码: ```Objective-C NSTimeInterval currentTimeInterval = [[NSDate date timeIntervalSince1970]; NSTimeInterval currentTimeMillis = currentTimeInterval * 1000; ``` 这样,currentTimeMillis就是当前时间时间戳(以毫秒为单位)了。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Objective-c 获取当前时间](https://blog.csdn.net/weixin_30908103/article/details/94782903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [objective-c 获取当前时间](https://blog.csdn.net/chun799/article/details/8015372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值