注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

NXOpen C属性操作(2)  

2014-05-21 10:27:54|  分类: UG NX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

UG中的日期和时间格式

前面介绍到UF_ATTR_value_u这种联合类型,其中有一种形式是int time[2],time[0]是NX中的日期,time[1]是NX中的时间,虽然知道是一个整型,但是如何解读却没有说,这里详细介绍一下。

时间的计算公式:

iTime=10*(60*hour+Minute)+Second/6

其中hour是二十四小时制下的时间点,并且宜午夜零点开始计数。

日期则是从1969年12月29日到计算日期之间的天数。

NXOpen中有两个函数是专门用来处理计算时间的,一个是uc4582,它将NX计算日期和时间转化为C字符串,另一个是uc4583,其作用同uc4582相反,是将日期时间字符串转化为NX计算日期时间,这两个函数都位于头文件uf_cfi.h下。

uc4582函数原型如下:

int uc4582(
int date [2] ,
int dtype,
char* date_string,
char* time);

其中date[0]是日期,而date[1]则是时间,第二个参数决定日期和时间的表达方式:

1 = mm/dd/yy, hh:mm
2 = mm/dd/yy, hh:mm xM
3 = dd-mmm-yy, hh:mm
4 = dd-mmm-yy, hh:mm xM
5 = mm/dd/yyyy, hh:mm
6 = mm/dd/yyyy, hh:mm xM
7 = dd-mmm-yyyy, hh:mm
8 = dd-mmm-yyyy, hh:mm xM
9 = Formatted for the locale

注意,其中前面一个mm表示的是数值显示的月份,mmm表示符号显示的月份(例如May),第二个mm则是分钟,dd是日期,yy是年份的后两位,yyyy是四位数的年份,hh为小时,x代表显示A(上午)或者P(下午),注意模式7会采用24小时制,而模式8会采用1小时制。最后两个参数分别是日期字符串和时间字符串,不超过20个字符。

测试代码如下:

#include <uf.h>
#include <uf_part.h>
#include <uf_ui.h>
#include <uf_exit.h>
#include <string>
#include <uf_cfi.h>

void NXTimeTest()
{
    int date[2]={5627,3907};
    char date_str[20];
    char time_str[20];
    char msg[80];
    uc4582(date,9,date_str,time_str);
    sprintf_s(msg,"Date:%s, Time:%s",date_str,time_str);
    uc1601(msg,1);
}
//入口函数
extern DllExport void ufsta( char *param, int *returnCode, int rlen)
{
    if(UF_initialize()) 
        return;
    //Add your code here
    NXTimeTest();
    UF_terminate();
}
//退出函数
extern int ufusr_ask_unload()
{
    return UF_UNLOAD_IMMEDIATELY;
}
运行效果如下:
CX_0520_212541
数组中的第一个参数比较难以算出是哪一天,后面专门给出函数求解。不过第二个参数比较容易确定时间是多少。根据公式分析3907,对10取余,也就是7,乘以6就是秒数,剩余的3900除以10得到390,由于这个值应该是60*hour+Minute的值,因此,390除以60取整就是小时数(6),而对60取余(30)就是分钟数。
来说说如何确定一个给定值对应的日期是多少,或者反过来根据给定的日期,计算这个整数值。这个问题需要用到C语言中的time.h头文件,下面只给出实现计算给定日期的时间值。
int GetDateNum(int year,int month,int date)
{
    struct tm baseDate,inputDate;
    /*Note:in time.h, the standard epoch is 1970-1-1 00:00:00
    any time earlier than it may cause error result.
    note that 1970-1-1 is equal to 3, see as below:
    1969-12-29~0
    1969-12-30~1
    1969-12-31~2
    1970-01-01~3
    ...
    */
    baseDate.tm_year=1970-1900;
    baseDate.tm_mon=0;//0-Jan.
    baseDate.tm_mday=1;
    baseDate.tm_hour=1;
    baseDate.tm_min=1;
    baseDate.tm_sec=1;

    inputDate.tm_year=year-1900;
    inputDate.tm_mon=month-1;
    inputDate.tm_mday=date;
    inputDate.tm_hour=1;
    inputDate.tm_min=1;
    inputDate.tm_sec=1;

    time_t t1=mktime(&baseDate);
    time_t t2=mktime(&inputDate);
    return 4+(t2-t1)/(86400);
}
这里主要用到了mktime函数,将日期转化为时间类型time_t,然后计算两者之间的差值,由于时间都定在了同一个时间,这个差值肯定是86400的整数倍(一天86400秒),除去该值就是天数,但是由于C中不能支持1970-1-1之前的时间(能编译通过但是运行得到的结果是错误的),所以还需要进行补偿。
  评论这张
 
阅读(425)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016