时间转换问题

//dtmfnct.h 

//char=8bt 

//int=32bt 

//pure c ++ code 

#ifndef dtmfnctH 

#define dtmfnctH 

#include <math.h> 

//------------------------------------------------------------------------ 

int __fastcall strTOdate(char *); 

int __fastcall ymdTOdate(int, int, int); 

int __fastcall dateTOymd(int &, int &, int &, int); 

//--------//--------//--------//--------//--------//-------- 

int __fastcall strTOtime(char *); 

int __fastcall hmsTOtime(int, int, int); 

int __fastcall timeTOhms(int &,int &,int &, int); 

//--------//--------//--------//--------//--------//-------- 

int __fastcall IsLeapYear(int); 

int __fastcall MonthMaxDay(int, int); 

int __fastcall MonthTtlDay(int, int); 

int * __fastcall MonthMaxDayTable(int); 

int * __fastcall MonthTtlDayTable(int); 

//------------------------------------------------------------------------ 

//字串形式的日期(不包括时间)转换为数值形式, 

//例子: "2000_01_30" -> 730148 

 

// "2000_09_45" -> -1(error) 

int __fastcall strTOdate(char * vstr) 

{

int i,y,m,d; 

// 

i = y = m = d = 0; 

// 

for(;vstr[i]!=0;i++) 

{

if(vstr[i]>='0' && vstr[i]<='9') 

y = y * 10 + (vstr[i]-'0'); 

else 

break; 

// 

while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i++; 

// 

for(;vstr[i]!=0;i++) 

{

if(vstr[i]>='0' && vstr[i]<='9') 

m = m * 10 + (vstr[i]-'0'); 

else 

break;

// 

while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i++; 

// 

for(;vstr[i]!=0;i++)

{

if(vstr[i]>='0' && vstr[i]<='9') 

d = d * 10 + (vstr[i]-'0'); 

else

break; 

// 

return(ymdTOdate(y,m,d)); 

}

//年/月/日的数值转换为数值日期 

//例子: 0001_01_01 -> 0 

// 2300_90_08 -> -1 

//此函数经过 0001_01_01 -- 32767_12_31 的测试. 

 

int __fastcall ymdTOdate(int vy, int vm, int vd) 

{

if(vy<1 || vy>32767 || vm<1 || vm>12 || vd<1 || vd>MonthMaxDay(vy,vm)) 

return(-1); 

// 

vd += MonthTtlDay(vy,vm)-1; 

vy --; 

return((vy*365 + vy/4 - vy/100 + vy/400)+vd); 

}

 

//数值日期转换为年/月/日的数值 

//数值日期就是从0001_01_01开始计算的天数,启始数值为 0 

//此函数经过 0001_01_01 -- 32767_12_31 的测试. 

 

int __fastcall dateTOymd(int& ry, int& rm, int& rd, int vd) 

{

if(vd<0) 

{

ry = 0; 

rm = 0; 

rd = 0; 

return(0); 

//--------//-------- 

ry = vd / 365.2425; 

vd -= ry*365 + ry/4 - ry/100 + ry/400; 

// 

if(IsLeapYear(++ry)) 

rm = 366; 

else 

rm = 365; 

// 

if(vd>=rm) 

{

vd -= rm; 

ry ++; 

//--------//-------- 

rm = vd / 30.436875 + 1 ; 

vd -= MonthTtlDay(ry,rm); 

if(++vd<=0) 

{

vd += MonthMaxDay(ry,rm); 

rm --;

else if(vd>MonthMaxDay(ry,rm)) 

{

vd -= MonthMaxDay(ry,rm); 

rm ++; 

//--------//-------- 

rd = vd; 

// 

return(1); 

}

 

int __fastcall strTOtime(char *vstr) 

{

int i,h,m,s; 

// 

i = h = m = s = 0; 

// 

for(;vstr[i]!=0;i++) 

{

if(vstr[i]>='0' && vstr[i]<='9') 

h = h * 10 + (vstr[i]-'0'); 

else 

break; 

// 

while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i ++; 

// 

for(;vstr[i]!=0;i++) 

{

if(vstr[i]>='0' && vstr[i]<='9') 

m = m * 10 + (vstr[i]-'0'); 

else

break;

}

// 

while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i ++; 

// 

for(;vstr[i]!=0;i++) 

{

if(vstr[i]>='0' && vstr[i]<='9') 

s = s * 10 + (vstr[i]-'0'); 

else

break;

}

// 

return(hmsTOtime(h,m,s)); 

}

 

// 

int __fastcall hmsTOtime(int vh, int vm, int vs) 

{

if((vh=(((vh*60 + vm)*60+vs)*1000)%86400000)<0) 

vh += 86400000; 

return(vh); 

}

 

// 

int __fastcall timeTOhms(int& rh, int& rm, int& rs, int vt) 

{

if((vt%=86400000)<0) 

vt +=86400000; 

// 

rh = vt / 3600000 ; 

rm = (vt % 3600000)/60000; 

rs = (vt % 60000 )/1000 ; 

// 

return(vt%1000); 

}

 

//--------//--------//--------//--------//--------//-------- 

//判断闰年啦

int __fastcall IsLeapYear(int vy) 

{

return(((vy%4)==0) && (((vy%100)!=0)||((vy%400)==0))); 

}

 

int __fastcall MonthMaxDay(int vy, int vm) 

{

return(MonthMaxDayTable(vy)[vm-1]); 

}

 

int __fastcall MonthTtlDay(int vy, int vm) 

{

return(MonthTtlDayTable(vy)[vm-1]); 

}

 

// 

int* __fastcall MonthMaxDayTable(int vy) 

{

static int mmd0[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 

static int mmd1[12]={31,29,31,30,31,30,31,31,30,31,30,31}; 

// 

if(IsLeapYear(vy)) 

return(mmd1); 

else

return(mmd0); 

}

 

int* __fastcall MonthTtlDayTable(int vy) 

{

static int mtd0[13]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 

static int mtd1[13]={0,31,60,91,121,152,182,213,244,274,305,335,366}; 

// 

if(IsLeapYear(vy)) 

return(mtd1); 

else 

return(mtd0); 

#endif

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中使用 LocalDateTime 进行时间转换时,需要注意以下几点: 1. LocalDateTime 与数据库的时间类型转换:在使用 LocalDateTime 与数据库进行交互时,需要将 LocalDateTime 转换为对应的数据库时间类型,如 MySQL 中的 DATETIME 或 TIMESTAMP。可以使用 JPA 中的 @Convert 注解或自定义 Converter 进行转换。 2. LocalDateTime 与 JSON 数据的转换:在使用 Spring Boot 进行 Web 开发时,需要将 LocalDateTime 转换为 JSON 数据,或将 JSON 数据转换为 LocalDateTime。可以使用 Jackson 库中的 @JsonFormat 注解或自定义 JsonSerializer 和 JsonDeserializer 进行转换。 3. LocalDateTime 的时区问题:在使用 LocalDateTime 进行时间转换时,需要考虑时区的问题。可以使用时区相关的类如 ZoneId 和 ZonedDateTime 进行转换。 示例代码: 将 LocalDateTime 转换为数据库时间类型: ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Convert(converter = LocalDateTimeConverter.class) private LocalDateTime createTime; // getter 和 setter } @Converter public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> { @Override public Timestamp convertToDatabaseColumn(LocalDateTime localDateTime) { return localDateTime == null ? null : Timestamp.valueOf(localDateTime); } @Override public LocalDateTime convertToEntityAttribute(Timestamp timestamp) { return timestamp == null ? null : timestamp.toLocalDateTime(); } } ``` 将 LocalDateTime 转换为 JSON 数据: ```java @RestController public class UserController { @GetMapping("/users") public List<User> getUsers() { List<User> users = new ArrayList<>(); users.add(new User(1L, "Tom", LocalDateTime.of(2021, 8, 1, 12, 0, 0))); users.add(new User(2L, "Jerry", LocalDateTime.of(2021, 8, 2, 12, 0, 0))); return users; } @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { return new User(id, "Tom", LocalDateTime.of(2021, 8, 1, 12, 0, 0)); } // 自定义 JsonSerializer 和 JsonDeserializer @GetMapping("/users/{id}/detail") public UserDetail getUserDetail(@PathVariable Long id) { return new UserDetail(id, "Tom", LocalDateTime.of(2021, 8, 1, 12, 0, 0)); } public static class UserDetail { private Long id; private String name; @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class) private LocalDateTime createTime; // getter 和 setter } public static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { String str = p.getText(); return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } } public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值